以下是一个示例,waitpid系统调用将阻止父进程,直到子进程退出:
pid_t pid = fork();
if (pid < 0) {
printf("error\n");
return -1;
} else if (pid == 0) {
printf("child\n");
do_sonmething_in_child();
} else {
int status;
waitpid(pid, &status, 0);
printf("waitpid returned,do something else\n");
do_something_else();
}
我想要实现的是父进程不会被阻止,这可以通过使用信号来完成,所以我改变了我的代码:
void handler(int n) {
printf("handler %d\n", n);
int status;
wait(&status);
}
pid_t pid = fork();
if (pid < 0) {
printf("error\n");
return -1;
} else if (pid == 0) {
printf("child\n");
do_sonmething_in_child();
} else {
int status;
signal(SIGCHLD, handler);
do_something_else();
}
但另一个问题是,如果孩子退出 信号(SIGCHLD,处理程序) ,孩子将是一个僵尸,我们不能指望孩子退出 信号(SIGCHLD,处理程序) 被调用,那么,如何解决我的问题?
答案 0 :(得分:1)
您可以在fork()调用之前设置信号处理程序。