在 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 上,你需要使用其他方法來處理多進程和異常。