执行信号动作时会产生无关信号

时间:2013-12-07 09:28:33

标签: c

当进程执行信号操作,并发生另一个信号时,会发生什么? 我写了一个测试程序来检查它。它会在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

我的问题是:

  1. 当sigusr1操作正在运行时,sigusr2来了,所以两个sig动作同时运行,就像两个线程一样,是不是?

  2. 如果1是正确的,为什么sigusr1无法完成sigusr2完成运行?如果1错了,你能解释一下原因吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

当一个进程处于睡眠状态时,该进程也可以处理信号,它在一个线程中。

所以1是错的。

当进程从睡眠状态转为运行stat时,它会再次处理SIGUSR2。