【发布时间】:2016-01-30 20:21:04
【问题描述】:
即使出现信号,我也想让我的程序最多休眠 10 秒。所以,我尝试了以下程序。
程序:
#include<stdio.h>
#include<signal.h>
#include<errno.h>
int main()
{
printf("PID: %d\n",getpid());
int unslept=10;
while(unslept>0){
unslept=sleep(unslept);
if(errno==EINTR)
continue;
}
return 0;
}
输出:
$ ./a.out
PID: 18935
User defined signal 1
$
我预计即使信号中断,上述程序也会执行 10 秒。我在一个终端上进行实验,我 执行了这个程序。并使用另一个终端使用 kill 命令,我向该进程发送了 SIGUSR1 信号。但是,同样的问题 发生。一旦信号通过,程序就会终止。那么,有什么方法可以在不影响的情况下执行我的程序长达 10 秒 任何信号。
【问题讨论】:
-
你想处理这些信号还是忽略它们?
-
如果您阅读the
signal(7)manual page,您会看到SIGUSR1(和SIGUSR2)的默认操作是终止进程。 -
请阅读信号介绍。您似乎无法理解信号的工作原理。
标签: c linux unix signals system-calls