{教程}PHP多线程实例




 __DIR__ . "/run.php",  'pid' =>$i ,'total' =>$totals);
}

/*
展开:$cmdArr
Array
(
    [0] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 0
            [total] => 3
        )
    [1] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 1
            [total] => 3
        )
    [2] => Array
        (
            [path] => /var/www/html/company/pcntl/run.php
            [pid] => 2
            [total] => 3
        )
)
*/

pcntl_signal(SIGCHLD, SIG_IGN);    //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。
foreach ($cmdArr  as   $cmd) {
    $pid = pcntl_fork();    //创建子进程
    //父进程和子进程都会执行下面代码
    if ($pid == -1) {
        //错误处理:创建子进程失败时返回-1.
        die('could not fork');
    } else if ($pid) { //这里$pid>0
        //父进程会得到子进程号,所以这里是父进程执行的逻辑
        //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
        pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
    } else { //这里$pid=0
        //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。
        $path   = $cmd["path"];
        $pid = $cmd['pid'] ;
        $total = $cmd['total'] ;
        echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
        exit(0) ;
    }
}
?>

 

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
等待编辑中
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论