使用 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 process
或 defunct process
。为了防止僵尸儿童进程,只需在父进程结束时添加 pcntl_wait($status)
即可。
pnctl_wait 暂停父进程的执行,直到子进程退出。
值得注意的是,使用 SIGKILL
信号不能杀死 zombie process
。