在 PHP 中,处理多进程中的异常需要使用 pcntl 扩展提供的函数。以下是一个简单的示例,展示了如何在多进程中捕获和处理异常:
$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 上,你需要使用其他方法来处理多进程和异常。