画江湖之 PHP 多进程开发 [创建一个新的进程]

核心函数

概括:

函数
pcntl_fork  创建新进程
pcntl_waitpid  等待或返回fork的子进程状态
posix_getpid   返回当前进程 id
posix_getppid 取得父进程 id

注意
pcntl_fork 调用一次,返回两个值;子进程得到的是0,父进程得到的子进程 id

代码段

<?php

echo "Master process id = " . posix_getpid() . PHP_EOL;

$pid = pcntl_fork();//创建一个新的进程

switch ($pid) {
case -1://如果为-1就代表失败
    die('Create failed');
    break;
case 0://如果是0 就代表是子进程
    // Child
    echo "Child process id = " . posix_getpid() . PHP_EOL;//输出子进程的进程id
    sleep(2);
    echo "I will exit\n";
    break;
default:
    // Parent

    if ($exit_id = pcntl_waitpid($pid, $status, WUNTRACED)) {//为了防止主进程挂了 子进程变成孤儿进程 所以在等待子进程执行完成以后
        echo "Child({$exit_id}) exited\n";
    }
    echo "Parent process id = " . posix_getpid() . PHP_EOL;
    break;
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!