为什么我的父进程不等待其子进程完成执行?

发布于 2024-08-06 05:18:01 字数 384 浏览 3 评论 0原文

我有最基本的脚本:

$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid) {
     // we are the parent
     echo "parent done";
     pcntl_wait($status); //Protect against Zombie children
     echo "all done";
} else {
     // we are the child
     echo "Child finished";
}

当我运行这个脚本时,输出始终是“Child finish”。我在 lighttpd 服务器上运行它。

I have the most basic script:

$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid) {
     // we are the parent
     echo "parent done";
     pcntl_wait($status); //Protect against Zombie children
     echo "all done";
} else {
     // we are the child
     echo "Child finished";
}

When I run this, the output is always "Child finished". I'm running this on a lighttpd server.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伴我心暖 2024-08-13 05:18:01

可能是您从孩子那里收到信号,但它不是退出状态,请尝试以下操作:

do {
    pcntl_wait($status);
} while (!pcntl_wifexited($status));

确保状态是退出状态(SIGCHILD)。

Could be that your getting a signal from the child but it's not the exit status try some thing like:

do {
    pcntl_wait($status);
} while (!pcntl_wifexited($status));

To make sure the status is the exit one (SIGCHILD).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文