我有两个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的执行(启动/暂停),我们可以认为限制运行program2的其他方法可能是使用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/