Использование сигналов в с - PullRequest
0 голосов
/ 01 мая 2019

Я писал простую программу на c, где с помощью fork я создаю свой дочерний процесс:

#include <stdio.h>
#include <stdlib.h>
#include<signal.h>
#include<sys/types.h>

int handler(){

}
int main(int argc, char **argv)
{

    pid_t c=fork();
    if(c>0){
        sleep(1);
        printf("f:pid is %d \n",getpid());
        kill(c,SIGINT);
        wait(NULL);
    }

    if(c==0){
        pause();
        signal(SIGINT,handler);
        printf("child:pid is %d \n",getpid());
    }
}

Проблема в том, что ребенок ничего не печатает. Я думал, что пауза просто ждет сигнала, чтобы остановить процесс, и я не могу понять, почему печать никогда не происходит. Есть идеи?

1 Ответ

4 голосов
/ 01 мая 2019

Вам нужно настроить обработчик до того, как вы остановитесь. В противном случае pause() будет прерван сигналом, затем будет выполнено действие по умолчанию для сигнала, которое должно завершить процесс. Он никогда не добавит обработчик, потому что процесс убит первым.

    if(c==0){
        signal(SIGINT,handler);
        pause();
        printf("child:pid is %d \n",getpid());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...