gpt4 book ai didi

php - 守护进程 PHP : master process exits when child one crashes

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:46 25 4
gpt4 key购买 nike

我有许多用 PHP 编写的 linux 守护进程来做一些后台工作。有一个“主”进程有时会通过 pcntl_fork 产生工作进程并控制它们。

这是(非常简单的)代码:

private function SpawnWorker($realm, $parallelismKey)
{
$pid = pcntl_fork();

if ($pid)
{
$worker = DaemonInstance::Create($pid, $realm, $parallelismKey);
$worker->Store();
$this->workers[$pid] = $worker;
return $worker;
}

else if ($pid == 0) // we're in child process now
return Daemon::REINCARNATE;

else
xechonl("#red#UNABLE TO SPAWN A WORKER ($realm, $parallelismKey)");

return false;
}

在返回“reincarnate”值后,新的工作进程调用 posix_setsid,它返回一个新的 session ID。但是如果这个进程崩溃了,master 也会默默退出。

是否有可能阻止这种行为并使整个系统更加健壮?

最佳答案

您正在父进程中创建一个新工作进程,而不是在子进程中。这是我使用的一些标准代码:

$pid = pcntl_fork();
if ($pid == -1) {
// could not daemonize
exit(1);
} elseif ($pid > 0) {
exit(0); // already daemonized (we are the parent process)
} else {
umask(0);
$sid = posix_setsid();
if ($sid < 0) {
exit(1); // could not detach session id (could not create child)
}

// capture output and errors
fclose(STDIN); fclose(STDOUT); fclose(STDERR);
$STDIN = fopen('/dev/null', 'r');
$STDOUT = fopen('/dev/null', 'wb');
$STDERR = fopen('/dev/null', 'wb');

// ADD CODE HERE

关于php - 守护进程 PHP : master process exits when child one crashes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13251981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com