PHP 多进程 pcntl

pcntl_* 系列函数介绍。

$pid = pcntl_fork() 之后,当前进程和 fork 出来的子进程同时执行。

我们通过判断 $pid 来判断当前进程是哪个进程。

$pid 为 0 时为子进程,$pid-1 时子进程创建失败。其他为当前进程。

pcntl_wait() 等待或返回 fork 的子进程状态

pcntl_wifexited() 检查子进程状态代码是否代表正常退出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$ppid = posix_getppid();

$pid = pcntl_fork();

if ($pid === -1) {
echo "error";
};

if ($pid === 0) {
echo "子进程 ...";
sleep(10);
} else {
echo "父进程 $ppid ...";

// 等待或返回 fork 的子进程状态
pcntl_wait($status, WUNTRACED);
// 检查状态代码是否代表一个正常的退出
if(pcntl_wifexited($status)){
return;
};
}
0%