gpt4 book ai didi

linux - 当子进程退出时父进程在 Linux 中畅通无阻,如何让父进程调用等待?

转载 作者:太空宇宙 更新时间:2023-11-04 10:21:06 24 4
gpt4 key购买 nike

这里有一个例子,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();
}

但是另一个问题来了,如果子进程在signal(SIGCHLD, handler)之前退出,那么子进程就会变成僵尸,我们不能期望子进程在之后退出>signal(SIGCHLD, handler) 被调用,那么,如何解决我的问题?

最佳答案

您可以在 fork() 调用之前设置信号处理程序。

关于linux - 当子进程退出时父进程在 Linux 中畅通无阻,如何让父进程调用等待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43862930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com