[英]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.