首页 > 解决方案 > 尽管使用了 signal() 函数,为什么 SIGUSR1 会终止我的子进程?

问题描述

我有以下代码:

void sig_handler(int sig) {
    printf("Hello child\n");
}

int main()
{
    pid_t child = fork();
    if (child > 0)
    {
        printf("Hello parent\n");
        kill(child, SIGUSR1);
    }
    else if (child == 0)
    {
        signal(SIGUSR1, sig_handler);
        printf("In child\n");
    }
    else
    {
        printf("Error\n");
    }
    return 0;
}

我希望代码运行:

Hello parent
Hello child
In child

但是在父母发送后立即杀死孩子kill(child, SIGUSR1);,结果只是:

Hello parent

我已经阅读了文档,默认操作SIGUSR1是终止,但是,我已经实现了signal(SIGUSR1, sig_handler);捕获的信号处理程序SIGUSR1,那么为什么孩子仍然被杀死?

标签: clinuxsignals

解决方案


我想说有两种可能性:要么子进程在主进程发送信号之前死亡,要么主进程在设置处理程序之前发送信号。

编辑:如果你只得到“你好父母”它不能是第一个。


推荐阅读