PCNTL是PHP中进程控制的扩展,包含了一些函数用于创建和管理进程,可以在PHP中实现多进程,主要用于网络服务器、守护进程等高并发场景。
下面给出一个简单的示例代码,展示如何创建一个子进程,在子进程中执行一段代码。
<?php
// 创建子进程
$pid = pcntl_fork();
if ($pid == -1) {
// 创建进程失败
exit("Could not fork");
} else if ($pid) {
// 父进程
echo "Parent process PID is " . getmypid() . PHP_EOL;
// 等待子进程结束
pcntl_waitpid($pid, $status);
} else {
// 子进程
echo "Child process PID is " . getmypid() . PHP_EOL;
// 在子进程中执行一段代码
while (true) {
echo "Child process running..." . PHP_EOL;
sleep(1);
}
}
?>
在上面的代码中,首先调用pcntl_fork()函数创建子进程,如果返回值为-1,则表示创建进程失败;如果返回非0的值,则表示当前进程是父进程,进入父进程分支;如果返回0,则表示当前进程是子进程,进入子进程分支。
在父进程中,当前进程会打印出自己的PID,并且等待子进程结束,通过调用pcntl_waitpid()函数来实现。
在子进程中,当前进程会打印出自己的PID,并且执行一个死循环,每隔1秒钟打印一句话。
需要注意的是,在子进程中需要退出循环,并且调用exit()函数退出进程。否则子进程会成为僵尸进程。
上述代码可以通过命令行执行,比如在Linux系统中,可以通过以下命令运行:
$ php example.php
输出结果如下:
Parent process PID is 1234
Child process PID is 1235
Child process running...
Child process running...
Child process running...
...
可以看到,父进程和子进程都能够正常运行,并且可以通过PID区分开来。
正文完