[問題] 有關 multi signal loss
大家好
想詢問有關 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 嗎?
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 42.73.195.25
※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1531335787.A.84F.html
※ 編輯: shiningboy (42.73.195.25), 07/12/2018 03:12:10
→
07/12 14:54,
6年前
, 1F
07/12 14:54, 1F
→
07/12 14:54,
6年前
, 2F
07/12 14:54, 2F
→
07/12 14:55,
6年前
, 3F
07/12 14:55, 3F
推
07/12 18:44,
6年前
, 4F
07/12 18:44, 4F
推
07/12 18:55,
6年前
, 5F
07/12 18:55, 5F
→
07/12 18:55,
6年前
, 6F
07/12 18:55, 6F
→
07/12 18:55,
6年前
, 7F
07/12 18:55, 7F
LinuxDev 近期熱門文章
PTT數位生活區 即時熱門文章