C

时间:2015-10-30 11:57:51

标签: c linux unix 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;
}

输出:

$ ./a.out 
PID: 18935
User defined signal 1
$

我希望即使信号中断,上述程序也会执行10秒。我在一个终端我实验它 执行了这个程序。使用kill命令使用另一个终端我将SIGUSR1信号发送到此进程。但是,同样的问题 发生。一旦信号通过,程序就会终止。那么,有没有办法在不影响的情况下执行我的程序长达10秒 任何信号。

2 个答案:

答案 0 :(得分:1)

您可以使用信号处理机制。注册处理中断信号的方法,并在函数中忽略它。

// signal handler
    void my_function(int sig){
      //do nothing
    }

// register signal
    signal(SIGNAL_ID, my_function);  

答案 1 :(得分:1)

您可以忽略该信号。请参见下面的示例,在该示例中,如果SIGUSR1信号被中断,它只是使用SIG_IGN忽略该信号。

#include<stdio.h>
#include<signal.h>

    int main(void)
    {
            if (signal(SIGUSR1, SIG_IGN) == SIG_ERR)
                    perror("SIGUSR1");

            sleep(30);
    }