2014-03-27 74 views
0

我是新来pcnt_fork,需要解释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"; 
    } ?> 

ouptut: 25347-父 0孩子

我的问题是,这里$ PID会是孩子的进程ID过程即25347对不对? 那么它应该只呼应父母那么为什么它也给0孩子作为输出...谁能解释

+0

是这些正在使用的只有3 echo语句? – Tabby

+0

是的,这些只是三条语句 –

+0

'pcntl_fork()'后面的任何内容都将是* both *进程的输出。 –

回答

0

这是国家看起来像一个叉手术后什么:

  fork() 
     +------+-----+ 
    child | parent 
-------------+------------ 
> echo $pid | > echo $pid 
0   | 4650 
+0

好吧,这个进程将被异步地优先执行,意味着父进程将首先完成它的执行,然后子进程将开始它的执行,对吗? –

+0

@SupriyaPansare不,它发生在同一时间(这就是为什么我“画”他们相邻);哪个输出第一个没有严格定义,但似乎父输出是第一个。 –

+0

谢谢jack .... :) –

0

pcntl-fork(就像叉)叉一个孩子,但它并没有关闭父。

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

您收到的两行打印来自两个不同的过程:已收到孩子的pid和孩子本身的父母。

0

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