我不明白下面的代碼:父進程等到子進程終止時,子進程如何才能殺死父進程?
pid_t pid;
int counter = 0;
void handler1(int sig) {
counter++;
printf("counter = %d\n", counter);
fflush(stdout);
kill(pid, SIGUSR1);
}
void handler2(int sig) {
counter += 3;
printf("counter = %d\n", counter);
exit(0);
}
int main() {
signal(SIGUSR1, handler1);
if ((pid = fork()) == 0) {
signal(SIGUSR1, handler2);
kill(getppid(), SIGUSR1);
while (1) {
};
} else {
pid_t p;
int status;
if ((p = wait(&status)) > 0) {
counter += 2;
printf("counter = %d\n", counter);
}
}
}
如何可以在父進程等待,直到它的子進程終止子進程實際上殺害父進程?
使用案例:家長分給孩子。孩子通過閱讀配置等啓動,並且只有在成功啓動後纔將SIGUSR1發送給父節點。在此之前,如果孩子在開始時死亡(因爲它是在「wait()」中),並且在處理完SIGUSR1之後父節點終止並假定孩子會好。 –
注意[如何避免在信號處理程序中使用'printf()'](http://stackoverflow.com/questions/16891019/)。 –