当进程执行信号操作,并发生另一个信号时,会发生什么? 我写了一个测试程序来检查它。它会在linux上运行吗?
#include <stdio.h>
#include <signal.h>
static void sighandle(int signo){
printf("sig %d start\n",signo);
sleep(10);
printf("sig %d end\n",signo);
}
int main(void){
if(signal(SIGUSR1,sighandle)){
perror("signal");
return -1;
}
if(signal(SIGUSR2,sighandle)){
perror("signal");
return -1;
}
while(1){
pause();
}
return 0;
}
我执行过它:
root@virtual-machine:~# ./a.out &
[1] 10140
kill -SIGUSR1 10140 root@gmdz-virtual-machine:~# sig 10 start
kill -SIGUSR2 10140
sig 12 start
root@gmdz-virtual-machine:~# sig 12 end
sig 10 end
我的问题是:
当sigusr1操作正在运行时,sigusr2来了,所以两个sig动作同时运行,就像两个线程一样,是不是?
如果1是正确的,为什么sigusr1无法完成sigusr2完成运行?如果1错了,你能解释一下原因吗? 谢谢。
答案 0 :(得分:0)
当一个进程处于睡眠状态时,该进程也可以处理信号,它在一个线程中。
所以1是错的。
当进程从睡眠状态转为运行stat时,它会再次处理SIGUSR2。