3

私が理解している限り、親プロセスに送信されたシグナルは子プロセスに送信されるべきではありません。では、以下の例で SIGINT が子と親の両方に到達するのはなぜでしょうか?

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

void sigCatcher( int );

int main ( void ) {
    if (signal(SIGINT, sigCatcher) == SIG_ERR) {
        fprintf(stderr, "Couldn't register signal handler\n");
        exit(1);
    }
    if(fork() == 0) {
        char *argv[] = {"find","/",".",NULL};
        execvp("find",argv);
    }
    for (;;) {
        sleep(10);
        write(STDOUT_FILENO, "W\n",3);
    }

    return 0;
}

void sigCatcher( int theSignal ) {
        write(STDOUT_FILENO, "C\n",3);
}
4

1 に答える 1

3

^-C と入力して SIGINT を送信すると、フォアグラウンド処理グループのすべてのプロセスにシグナルが送信されます。を使用するkill -2と、親 (または指定したプロセス) にのみ移動します。

于 2012-10-15T14:06:32.173 に答える