簡體   English   中英

為什么子進程不回復父進程發送的信號?

[英]Why the child process doesn't reply to the signal sent from parent process?

我正在學習進程間通信的信號,我在下面做了非常簡單的測試代碼:

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

void sighup();
void sigint();
void sigquit();

int main(int argc, const char *argv[])
{
    int child_pid;
    if((child_pid = fork()) < 0) exit (1);
    if(child_pid == 0) {
        sleep(2);
        signal(SIGHUP, sighup);
        signal(SIGINT, sigint);
        signal(SIGQUIT, sigquit);
        puts("this is the end of the child process");
    } else {
        printf("\n Parent: sending SIGHUP signal to child\n\n");
        kill(child_pid, SIGHUP);
        printf("\n Parent: sending SIGINT signal to child\n\n");
        kill(child_pid, SIGINT);
        printf("\n Parent: sending SIGQUIT signal to child\n\n");
        kill(child_pid, SIGQUIT);
    }
}

void sighup() {
    signal(SIGHUP, sighup);
    printf("CHILD: I have received a SIGHUP\n");
}
void sigint() {
    signal(SIGINT, sigint);
    printf("CHILD: I have received a SIGINT\n");
}

void sigquit() {
    sleep(2);
    printf("CHILD: My parent process has killed me!!");
    printf("CHILD: cleaning up...\n");
    exit(0);
}

子進程似乎什么也不做,甚至不打印進程字符串的結尾。 任何想法?

由於競爭條件,未在子級中調用您的信號處理程序。 父線程在子級調用signal()之前向子線程發送一個信號,該signal()將覆蓋信號處理行為。

在這種情況下,子級將收到SIGINT並執行其默認行為,該行為將終止。 因此,孩子在sleep(2)之后執行語句之前終止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM