mrg*_*mrg 7 c unix linux signals system-calls
即使发生信号,我也想让我的程序休眠 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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./a.out
PID: 18935
User defined signal 1
$
Run Code Online (Sandbox Code Playgroud)
我预计即使信号中断,上述程序也会执行 10 秒。我在一个终端中执行了这个程序。并使用另一个终端使用 kill 命令向该进程发送 SIGUSR1 信号。但是,同样的问题发生了。一旦信号通过,程序终止。那么,有没有办法在不影响任何信号的情况下执行我的程序长达 10 秒。
您可以使用信号处理机制。注册将处理中断信号的方法,并在函数中忽略它。
// signal handler
void my_function(int sig){
//do nothing
}
// register signal
signal(SIGNAL_ID, my_function);
Run Code Online (Sandbox Code Playgroud)