Почему SIGUSR1 завершает мой дочерний процесс, хотя используется функция signal ()? - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть следующий код:

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, тогда почему ребенок все еще убит?

1 Ответ

1 голос
/ 19 апреля 2020

Я бы сказал, что есть две возможности: либо процесс son умирает до того, как основной процесс отправит сигнал, либо основной процесс отправит сигнал до того, как будет установлен обработчик.

Edit: если вы только получаете «Привет, родитель», это не может быть первым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...