c++ - linux中C/C++向其他独立进程发送中断信号

标签 c++ c multithreading performance gcc

我有两个 C/C++ 程序。 Program1 有多个线程(在我的控制下,我可以在该程序中添加任何代码),而 Program2 有一个线程(不在我的控制下,因此无法添加任何代码)。两个程序运行在不同的CPU核心上。

Program1 中的线程以循环方式运行。

有什么方法可以通过从 Program1 的线程发送任何信号或中断来控制 program1 中其他 program2 的执行吗?

是否可以通过以下方式控制执行?

Step 1 : Thread (i) sends interrupt/notification to start execution of Program2
Step 2 : Program2 start execution
Step 3 : Thread (i+1) sends notification/interrupt to stop execution of Program2 or preempted/scheduled out this process from CPU core.


Core -1 : ---T1----Signal sent to V to start --T2---Signal sent to V to stop--


Core -2 : ---------------- V start here -----------------V stop here------

当Program1和Program2都运行在同一个CPU核心上时,我可以控制program2的执行。

Core 1 : ----T1----V ----- T2 ----- V -----

现在,我想在两个独立进程在单独的 CPU 内核中运行的场景中实现此功能。

我正在使用 gcc/g++ 和 linux。

任何相关文档/概念的链接或实现上述想法的建议都会有很大的帮助。提前致谢。

更新 1:我们无法在 Program2 中编写信号处理程序代码。因为它是独立的程序。我们可以在 Program1 中编写任何内容。

更新2:从目前收到的几条评论来看,我们似乎需要在Program2中编写一个信号处理程序,通过发送信号/中断来控制program2的执行。没有必要发送信号/中断来控制Program2的执行(启动/暂停),我们可以考虑其他方式来限制程序2的运行,可能是通过使用cpulimit或其他我不知道的方式不知道。

Core -1 : ---T1----Something needs to be done here to start V --T2---Something needs to be done here to stop V--


Core -2 : ---------------- V start here --------------------------------V stop here------

最佳答案

您可以将诸如gdb之类的调试器附加到正在运行的进程。然后您可以检查和修改变量、停止进程、强制其调用特定函数等。

调试器利用注释中提到的ptrace机制。这样,您就不需要学习将程序符号表中的信息转换为实际控制代码的所有细节,这一切都已由调试器的作者完成。

为此,您需要一份带有完整符号表的程序拷贝。

如果您只想暂停程序并恢复它,您可以从 shell 执行此操作:

kill -STOP <pid>
kill -CONT <pid>

关于c++ - linux中C/C++向其他独立进程发送中断信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36894504/

相关文章:

python - 如何对 2D 依赖表进行排序/排序

c - 如何与 NT 安装管理器交互以分配驱动器号?

java - 如何在应用程序运行时将多个 textView 更改为特定的日期和时间

java - 用于 IntelliJ 多线程测试的 Java 工具

C++:什么是::for?

python - cppyy 继承包含智能指针的类

c++ - 在 Visual Studio C++ 中创建应用程序图标的最佳方式

c++ - 在 C++ 中使用 tiny xml 进行 xml 解析的问题?

c - 以十列打印到 txt 文件?

c# - Mono 2.8.1 断言 mono_wsq_count (wsq) == 0