首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么pcntl_fork返回的进程ID与实际运行的进程ID不同?

为什么pcntl_fork返回的进程ID与实际运行的进程ID不同?
EN

Stack Overflow用户
提问于 2018-06-06 04:23:52
回答 1查看 22关注 0票数 0

我正在使用pcntl_fork()派生一个子进程。在父代码块中,我将进程ID记录到一个文件中,这应该是子进程ID,对吗?

此进程ID与实际运行的进程ID不同。

代码语言:javascript
复制
$pid = pcntl_fork();

if ($pid == -1) {
    die('could not fork');
} else if ($pid) {
    // we are the parent
    file_put_contents(dirname(__FILE__) . "/update.pid", $pid);
    //pcntl_wait($status); //Protect against Zombie children
} else {
    $command = "php " . dirname(__FILE__) . "/my_script.php &";
    $output = shell_exec($command);
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-06 05:40:21

原因是shell_exec()运行一个php进程,然后在它自己的子进程中运行shell。因此,您具有以下流程层次结构:

代码语言:javascript
复制
- php -- original script
    - shell -- created by pcntl_fork() and shell_exec
        - php -- created by executing "php" in shell

pcntl_fork()返回的PID是第二个进程。

您可以使用exec命令告诉shell使用自己的进程来运行php命令:

代码语言:javascript
复制
$command = "exec php " . dirname(__FILE__) . "/my_script.php";

但是,如果要执行此操作,则不能在命令末尾使用&。为了在后台运行命令,必须在新进程中运行该命令,这样原始shell就可以继续运行,而无需等待它完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50708392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档