[英]Different signal handlers for parent and child
我有一個帶有信號處理程序的程序:
signal(SIGINT, signalhandler);
然后程序分叉和子代需要一個不同的信號處理程序,所以:
pid = fork();
/* What happens here? */
if(pid==0)
{
signal(SIGINT, signalhandler_for_child);
}
那么如果在fork之后但在分配新的簽名處理程序之前調用SIGINT會發生什么?
這可能發生,或者在孩子獲得新的信號處理程序之前不可能被中斷。
如果可能的話。 我如何將信號排隊給孩子,以便有時間獲得新的處理程序?
我知道概率(如果存在的話)必須幾乎為0,但我想確保應用程序在這方面是健壯的。
那么如果在fork之后但在分配新的簽名處理程序之前調用SIGINT會發生什么?
將調用父項中安裝的信號處理程序。 子進程繼承它。
這可能發生,或者在孩子獲得新的信號處理程序之前不可能被中斷。
可能會發生。
如果可能的話。 我如何將信號排隊給孩子,以便有時間獲得新的處理程序?
要確保,您需要在調用fork()
之前阻止SIGINT,然后在子進程中重新安裝另一個SIGINT,然后取消阻止SGINT。
/* block SIGINT here. */
pid = fork();
if (pid == 0) {
/* Install a new SIGINT handler here. */
/* Unblock SIGINT. */
...
} else if (pid > 0) {
/* The SIGINT handler is already in place. So just unblock SIGINT. */
...
} else {
/* error */
}
查看sigprocmask()
和pthread_sigmask()
以阻止和解除阻塞信號。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.