Когда мы вызываем SIGINT (ctrl + c) для родительского процесса, я понимаю, что родительский процесс будет передавать сигнал своим дочерним процессам.Однако будут ли дочерние процессы обрабатывать сигнал так же, как родительский, при условии, что я зарегистрировал собственный обработчик сигналов перед разветвлением.Например:
void interruptHandler(int sig) {
int thisPid = (int) getpid();
while (1) {
int childPid = wait(NULL);
if (childPid == -1) break;
printf("\t[%d] terminated.\n", childPid);
}
printf("PID[%d] Ended.\n", thisPid);
exit(1);
}
int main(int argc, char const *argv[]) {
if (signal(SIGINT, interruptHandler) == SIG_ERR) {
printf("Handler registration error");
}
for (int count = 0; count < 10; count++) {
int pid = fork();
if (pid == 0) {
return 0;
}
}
while (1);
return 0;
}
Выполнение Ctrl + C во время выполнения вышеуказанного процесса, похоже, создает у меня впечатление, что родительский элемент обрабатывает сигнал только с помощью пользовательского обработчика, в то время как дочерний процесс обрабатывает сигнал по умолчаниюобработчик.
Вот как выглядит вывод: 1
Есть ли способ заставить дочерние процессы использовать пользовательский обработчик?