使用 fork 创建子进程

PHP 内置函数 pcntl_fork 用于创建子进程。pcntl_fork 与 unix 中的 fork 相同。它不接受任何参数并返回整数,可用于区分父进程和子进程。请考虑以下代码进行说明

<?php
    // $pid is the PID of child
    $pid = pcntl_fork();
    if ($pid == -1) {
         die('Error while creating child process');
    } else if ($pid) {
         // Parent process
    } else {
         // Child process
    }
?>

正如你所看到的,-1 在 fork 中是一个错误,并且没有创建子项。在创建孩子时,我们有两个独立的 PID 进程。

当父进程在子进程之前完成时,这里的另一个考虑因素是 zombie processdefunct process。为了防止僵尸儿童进程,只需在父进程结束时添加 pcntl_wait($status) 即可。

pnctl_wait 暂停父进程的执行,直到子进程退出。

值得注意的是,使用 SIGKILL 信号不能杀死 zombie process