进程与信号不可靠问题

Posted jmst

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了进程与信号不可靠问题相关的知识,希望对你有一定的参考价值。

进程在处理过程中是否还可以接收处理信号,相同信号/不同信号

范列

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

void set_signal(int signo)
{
    if(signo == SIGINT)
    {
        printf("%d catch SIGINT\n",getpid());
        sleep(5);
        printf("process the sigint finished\n");
    }
    if(signo==SIGTSTP)
    {
        printf("%d catch SIGTSTP\n",getpid());
        sleep(5);
        printf("process the sigtstp finished\n");
    }
}

int main()
{
    if(signal(SIGINT,set_signal)==SIG_ERR)
    {
        printf("signal error\n");
        return 1;
    }
    if(signal(SIGTSTP,set_signal)==SIG_ERR)
    {
        printf("signal error\n");
        return 1;
    }
    
    //暂停等待信号
    while(1) pause(); 
}

编译执行

进程处理中中发送相同信号,先发送ctrl+c 在发送ctrl+c
^C3267 catch SIGINT
^Cprocess the sigint finished
3267 catch SIGINT
process the sigint finished

进程处理中发送不同信号,先发送ctrl+c 在发送ctrl+z
^C3267 catch SIGINT
^Z3267 catch SIGTSTP
process the sigtstp finished
process the sigint finished

结论

进程处理中发送相同信号/不同信号仍然会处理,但是超过2次进程就会屏蔽

 

以上是关于进程与信号不可靠问题的主要内容,如果未能解决你的问题,请参考以下文章

linuxbingc(进程信号)

linuxbingc(进程信号)

信号

进程间通信方式总结

linux--进程信号

在 USR1 信号后可靠地杀死睡眠进程