<?php $i = 0; while($i < 3) { $pid = pcntl_fork(); // 父进程和子进程都会执行以下代码 if ($pid == -1) { // 创建子进程错误,返回-1 die('could not fork'); } else if ($pid) { // 父进程会得到子进程号,所以这里是父进程执行的逻辑 pcntl_wait($status); // 父进程必须等待一个子进程退出后,再创建下一个子进程。 $cid = $pid; // 子进程的ID $pid = posix_getpid(); // pid 与mypid一样,是当前进程Id $myid = getmypid(); $ppid = posix_getppid(); // 进程的父级ID $time = microtime(true); echo "I am parent cid:$cid myid:$myid pid:$pid ppid:$ppid i:$i $time \n"; } else { // 子进程得到的$pid 为0,所以这里是子进程的逻辑 $cid = $pid; $pid = posix_getpid(); $ppid = posix_getppid(); $myid = getmypid(); $time = microtime(true); echo "I am child cid:$cid myid:$myid pid:$pid ppid:$ppid i:$i $time \n"; //exit; //sleep(2); } $i++; }
运行结果:
I am child cid:0 myid:15 pid:15 ppid:14 i:0 1596186095.2482 I am child cid:0 myid:16 pid:16 ppid:15 i:1 1596186095.2488 I am child cid:0 myid:17 pid:17 ppid:16 i:2 1596186095.2493 I am parent cid:17 myid:16 pid:16 ppid:15 i:2 1596186095.2536 I am parent cid:16 myid:15 pid:15 ppid:14 i:1 1596186095.2577 I am child cid:0 myid:18 pid:18 ppid:15 i:2 1596186095.2582 I am parent cid:18 myid:15 pid:15 ppid:14 i:2 1596186095.2623 I am parent cid:15 myid:14 pid:14 ppid:8 i:0 1596186095.2664 I am child cid:0 myid:19 pid:19 ppid:14 i:1 1596186095.2669 I am child cid:0 myid:20 pid:20 ppid:19 i:2 1596186095.2674 I am parent cid:20 myid:19 pid:19 ppid:14 i:2 1596186095.2715 I am parent cid:19 myid:14 pid:14 ppid:8 i:1 1596186095.2756 I am child cid:0 myid:21 pid:21 ppid:14 i:2 1596186095.2761 I am parent cid:21 myid:14 pid:14 ppid:8 i:2 1596186095.2802 运行结束,执行耗时:181毫秒
待循环终止,子进程执行完毕,再执行父进程,再待循环终止,逐级执行。