簡體   English   中英

將SIGINT發送到子進程

[英]send SIGINT to child process

我正在嘗試創建一個子進程,然后將SIGINT發送給子進程而不終止父進程。 我試過這個:

pid=fork();
  if (!pid)
  {
      setpgrp();
      cout<<"waiting...\n";
      while(1);
  }
  else
      {
      cout<<"parent";
      wait(NULL);
      }

但當我點擊Cc時,兩個過程都被終止了

不要使用CTRL-C ,它向具有相同控制終端的所有進程發送信號(即,在同一會話中)。 這是setpgid沒有改變的東西雖然我認為有一個為此目的的setsid (設置會話ID)調用。

最簡單的解決方案只是針對特定流程而不是會話。 從命令行:

kill -INT pid

來自C:

kill (pid, SIGINT);

其中pid是您要發送信號的進程ID。

父級可以從fork()的返回值中獲取相關的PID。 如果孩子想要自己的PID,它可以調用getpid()

Aha,流程小組和會議以及流程小組負責人和會議小組負責人的神秘面紗再次出現。

您的控制/ C將信號發送給一個組。 您需要發出個人pid的信號,因此請遵循paxdiablo的指示或發信號(“殺死”)來自父母的孩子。 並且不要忙等! 將sleep(1)置於循環中,或者更好的是wait(2)系統調用之一。

您可以嘗試實現一個SIGINT信號處理程序,如果子進程正在運行,它將終止子進程(如果沒有,則關閉應用程序)。

或者,將父級的SIGINT處理程序設置為SIG_IGN,將子級設置為SIG_DFL。

暫無
暫無

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

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