pcntl_fork、pcntl_wait

$i = 0;
while ($i < 2){
    $pid = pcntl_fork();//父进程和子进程都会执行(包括此行)以下代码,只是父进程中返回创建的子进程ID,子进程中未创建进程所以返回0
    if ($pid == -1) { // 创建子进程错误,返回-1
        die('error');
    } else if ($pid) {
        // 父进程会得到子进程号,所以这里是父进程执行的逻辑
        pcntl_wait($status); // 挂起当前进程(就是下面的代码先不执行了),直到一个子进程退出,然后继续执行

        $fork_id = $pid; // 子进程的ID或0
        $pid = posix_getpid(); // 当前进程ID
        $ppid = posix_getppid(); // 父进程ID
        $time = microtime(true);
        echo " parent fork_id:$fork_id  pid:$pid ppid:$ppid i:$i $time \n";
    } else {
        // 子进程得到的$pid 为0,所以这里是子进程的逻辑
        $fork_id = $pid; // 子进程的ID
        $pid = posix_getpid();
        $ppid = posix_getppid();
        $time = microtime(true);
        echo " child fork_id:$fork_id  pid:$pid ppid:$ppid i:$i  $time \n";
        //exit;
        //sleep(2);
    }
    $i++;
}

//498 parent
pcntl_fork(); //wait -4- parent fork_id:6499 pid:6498 ppid:3471 i:0 1491394182.2211
echo 1;

pcntl_fork();//wait -6- parent fork_id:6501 myid:6498 pid:6498 ppid:3471 i:1 1491394182.2302
echo 1;

/**
499 child parent
pcntl_fork(); -1- child fork_id:0 pid:6499 ppid:6498 i:0 1491394182.2065
echo 1;

pcntl_fork(); //wait -3- parent fork_id:6500 pid:6499 ppid:6498 i:1 1491394182.2143
echo 1;
*/

    /**
     500 child
    pcntl_fork();  -2- child   fork_id:0   pid:6500 ppid:6499 i:1  1491394182.2077
    echo 1;
     */

/**
501 child
pcntl_fork(); -5- child fork_id:0 pid:6501 ppid:6498 i:1 1491394182.222
echo 1;
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值