php多进程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zchqq/article/details/82905216

 需在linux环境执行

/* 确保这个函数只能运行在SHELL中 */
if (substr(php_sapi_name(), 0, 3) !== 'cli') {
    die("cli mode only");
}
//cli_set_process_title("我是父进程,我的进程id是{$ppid}.");
//简单的子进程
$ppid = posix_getpid();
echo "我也不知道现在是什么进程,现在进程id是{$ppid}\n";
$pid = pcntl_fork();
echo "fork了一个进程,返回值是{$pid}\n";
if ($pid == -1) {
    throw new Exception('fork子进程失败!');
} elseif ($pid > 0) {
    echo "我是父进程,我的进程id是{$ppid}\n";
    sleep(5); // 保持30秒,确保能被ps查到
} else {
    $cpid = posix_getpid();
    echo "我是{$ppid}的子进程,我的进程id是{$cpid}\n";
    sleep(5);
}

//执行结果
/*我也不知道现在是什么进程,现在进程id是2330
fork了一个进程,返回值是2331
我是父进程,我的进程id是2330
fork了一个进程,返回值是0
我是2330的子进程,我的进程id是2331*/


//三个子进程任务处理
shell_exec('split -1 2500,-d file.lo prefix_name');
for ($i=1;$i<=3;$i++)
{
    $pid = pcntl_fork();
    if($pid == -1){
        die("could not work");
    }elseif($pid){
        echo "I am 父进程 $i \n";
    }else{
        $cpid = posix_getpid();
        echo "我是子进程$i===子进程id是===$cpid \n";
        exit;
    }
}
//等待子进程结束
while (pcntl_waitpid(0,$status) != -1){
    $status  = pcntl_wexitstatus($status);
    echo "Child $status completed\n";
}
//执行结果
/*split: extra operand ‘prefix_name’
Try 'split --help' for more information.
I am 父进程 1
我是子进程1===子进程id是===2416
I am 父进程 2
我是子进程2===子进程id是===2417
I am 父进程 3
我是子进程3===子进程id是===2418
Child 0 completed
Child 0 completed
Child 0 completed*/

demo.php的内容


write_log1.php的内容


log.txt的内容

猜你喜欢

转载自blog.csdn.net/zchqq/article/details/82905216
今日推荐