0
으로 처리됩니다 :아니 모든 신호는 내가 포크를 사용하여 3 개 자식 프로세스를 만드는거야 약간의 C 프로그램이 C
이#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
void handler(int signum) {
printf("SIGNAL ARRIVED\n");
}
int main() {
signal(SIGTERM, handler);
pid_t pid;
pid_t parent = getpid();
int i;
for(i = 0; i < 3; i++) {
pid = fork();
if(pid == 0) {
kill(parent, SIGTERM);
exit(0);
}
}
while(wait(NULL) > 0) {}
exit(0);
}
내 예상 출력이 세 SIGNAL ARRIVED
이다, 그러나 때때로 나는 단지 그 두 가지를 얻을. 왜 이런가, 내가 무엇을 놓치고, 매번 세 번이나 얻을 수 있습니까?
시그널은 비동기 적으로 전달됩니다. 시그널은 비동기 적으로 전달됩니다. 시그널링 프로세스가 종료된다. 상위 프로세스가 실제로 세 신호 모두를보고 처리하도록 보장해야하는 경우 동기식 신호 처리를 시도 할 수 있습니다. 자세한 내용은 signal (7)을 참조하십시오. http://man7.org/linux/man-pages/man7/signal.7.html – David
잘못된 코드입니다. [signal-safety (7)] (http://man7.org/linux/man-pages/man7/signal-safety.7.html) 및 [signal (7)] (http://man7.org/ –
@ChrisDodd는 정규 신호가 대기하지 않았 음을 지적합니다. 이것은 또 다른 오류의 원인 일 수 있습니다. linux/man-pages/man7/signal.7.html Linux는 큐에 넣을 수있는 소위 "실시간 신호"를 지원합니다. 자세한 내용은 위의 man 페이지를 참조하십시오. – David