在 PHP 中,处理多进程中的异常需要使用 pcntl 扩展提供的函数。以下是一个简单的示例,展示了如何在多进程中捕获和处理异常:
<?php
// 定义一个处理异常的回调函数
function handleException($pid, $signo) {
echo "Process {$pid} received signal {$signo}\n";
pcntl_wait($status); // 等待子进程结束
}
// 设置信号处理器
pcntl_signal(SIGCHLD, 'handleException');
// 创建子进程
$processes = [];
for ($i = 0; $i < 5; $i++) {
$pid = pcntl_fork();
if ($pid == -1) {
die("Fork failed\n");
} elseif ($pid) {
// 父进程
$processes[] = $pid;
} else {
// 子进程
echo "Child process {$pid} started\n";
// 模拟一个异常
throw new Exception("An error occurred in child process {$pid}\n");
exit(0);
}
}
// 等待所有子进程结束
foreach ($processes as $pid) {
pcntl_wait($status);
}
echo "All child processes have finished.\n";
在这个示例中,我们首先定义了一个名为 handleException
的回调函数,用于处理子进程接收到的异常信号。然后,我们使用 pcntl_signal
函数设置了信号处理器,以便在子进程发生异常时调用该函数。
接下来,我们创建了 5 个子进程,并在每个子进程中抛出一个异常。父进程会等待所有子进程结束,并输出相应的信息。
请注意,这个示例仅适用于 POSIX 兼容系统,如 Linux 和 macOS。在 Windows 上,你需要使用其他方法来处理多进程和异常。