在 PHP 中,可以使用 pcntl 擴展來創建和管理多進程。為了進行資源管理,你需要關注以下幾點:
pcntl_signal(SIGTERM, function($signo) {
echo "Received SIGTERM, terminating process.\n";
// 釋放資源、關閉文件等操作
exit(0);
});
pcntl_waitpid()
函數來等待子進程結束并回收其資源。$childProcesses = [];
for ($i = 0; $i < 5; $i++) {
$pid = pcntl_fork();
if ($pid == -1) {
// 創建子進程失敗
exit(1);
} elseif ($pid == 0) {
// 子進程邏輯
echo "Child process {$i} started.\n";
// 執行任務、分配資源等操作
exit(0);
} else {
// 父進程邏輯
$childProcesses[] = $pid;
}
}
// 等待所有子進程結束
foreach ($childProcesses as $pid) {
pcntl_waitpid($pid, $status);
}
$lockFile = fopen("lockfile", "w+");
if (flock($lockFile, LOCK_EX)) { // 獲取獨占鎖
// 訪問共享資源
echo "Accessing shared resource.\n";
sleep(1);
flock($lockFile, LOCK_UN); // 釋放鎖
} else {
echo "Failed to acquire lock.\n";
}
fclose($lockFile);
pcntl_alarm()
函數設置超時,或使用 pcntl_kill()
函數取消子進程。// 設置 5 秒超時
pcntl_alarm(5);
// 子進程邏輯
echo "Child process started.\n";
sleep(6); // 模擬長時間運行的任務
exit(0);
通過遵循以上幾點,你可以在 PHP 中有效地進行多進程資源管理。