簡體   English   中英

在Linux中的C / C ++中向其他獨立進程發送中斷信號

[英]Sending interrupt signal to other independent process in C/C++ in linux

我有兩個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>

如果要暫停program2,可以使用終止/信號SIGCONT SIGSTOP SIGTSTP。

由於您不能在program2中進行任何更改,您如何期望program2能夠接收IPC /遠程信號?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM