尽管使用了 signal() 函数,但为什么 SIGUSR1 会终止我的 child 进程?

Why does SIGUSR1 terminate my child process although signal() function has been used?

我有以下代码:

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

但是child在parent发送kill(child, SIGUSR1);后立即被杀死,结果就是:

Hello parent

我读过文件说 SIGUSR1 的默认操作是终止,但是,我已经实现了信号处理程序 signal(SIGUSR1, sig_handler); 来捕获 SIGUSR1,那为什么child还是杀了?

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

编辑:如果你只得到 "Hello parent" 就不可能是第一个。