0

我是 pcnt_fork 的新手,

<?php
  $pid = pcntl_fork();
  echo $pid;
  if($pid) {
  // parent process runs what is here
  echo "-parent\n";
   }
  else {
  // child process runs what is here
  echo "-child\n";
  } ?>

输出 : 25347-parent 0-child

我的问题是,这里的 $pid 将是子进程的进程 ID,即 25347 对吗?那么它应该只回显父级,然后为什么它也将 0-child 作为输出...任何人都可以解释

4

3 回答 3

0

pcntl-fork(就像 fork 一样)分叉一个孩子,但它不会关闭父母。

最后你有 2 个正在运行的进程,父进程和子进程。

您收到的 2 行打印来自 2 个不同的进程:收到子进程 pid 的父进程和子进程本身。

于 2014-03-27T06:42:17.873 回答
0

成功时,子进程的 PID 在父执行线程中返回,并且在子执行线程中返回 0。失败时,将在父上下文中返回 -1,不会创建子进程,并引发 PHP 错误。

于 2014-03-27T06:48:55.530 回答
0

这是 fork 操作后的状态:

           fork()
      +------+-----+
    child    |   parent
-------------+------------
> echo $pid  | > echo $pid
0            | 4650
于 2014-03-27T06:50:12.907 回答