大家好
想詢問有關 signal loss 的問題
就是如果同一時間有多個訊號發送 ,
有捕捉到的訊號就執行 handler 做接下來的工作
但是似乎總會有幾個訊號會 loss 掉
例如 :
先設定好 struct sigaction action 及 handler
static void say(int sig){
if(sig == SIGUSR1){
printf("new process created\n");
}
}
sigemptyset(&action.sa_mask);
action.sa_flags = 0;
action.sa_handler = say;
sigaction(SIGUSR1 , &action , NULL);
接著
/*parent process ID*/
pid_t pp = getpid();
pid_t child;
/*fork 三次*/
for(int i=0 ; i<3 ; i++){
switch(child = fork()){
case (-1):{
perror("fork error\n");
exit(1);
break;
}
case 0:{
if( kill(pp , SIGUSR1)){
printf("signal send error\n");
}
break;
}
}
}
/*child processes all terminated*/
if( getpid() != pp ){
_exit(0);
}
while(1){};
也就是說只要有新的 fork process 都會發 SIGUSR1 給 parent process
總共會有七個 child process ,
但是每次執行 , handler 有處理的次數都不一樣
查了一下似乎是因為同一時間 , handler 在處理先到的訊號的時候 ,
會忽略後來的訊號 , 但是 handler 處理完之後 , 似乎 SIGUSR1 也沒有重發
想請問有甚麼方法可以確實的接收到每一個發出的訊號 , 以及觸發執行 handler 嗎?
謝謝