当有两个待处理的信号时,程序是否可以运行

时间:2014-12-10 15:52:27

标签: c linux signals

我有两个信号SIG1和SIG2分别带有handler1和handler2的情况。 handler1发送SIG2,带有“kill(getpid(),SIG2)”,假设getpid返回进程的pid,进入进程。

在handler2运行之前程序是否可能运行一段时间?

int counter;
void sigalrm_handler (int num) {
   counter += 1;
}
int main (void) {
signal(SIGALRM, &sigalrm_handler);
counter = 2;
alarm(1);
sleep(1);
counter -= 3;
exit(counter);
return
}

1 个答案:

答案 0 :(得分:1)

是的,这是可能的。传送到一个进程的信号不会立即处理(也许实时信号是这样做的,我不确定)。

Linux内核(肯定是linux内核1.0)将在系统调用返回或上下文切换(内核进程调度)时处理挂起的信号。在以下版本上可能没有太大变化。

您可以查看thisthis作为参考,虽然它很不完整。