Php kill在触发pcntl_信号之前退出系统调用

Php kill在触发pcntl_信号之前退出系统调用,php,Php,我制作了一个守护程序脚本,当我按下ctrl-c键时,我的信号被调用,但不是在我的“系统”调用立即退出之前。我处理信号的全部目的是让“系统”调用在退出无限循环之前优雅地完成。 如何阻止kill命令退出系统调用 declare(ticks=1) function exitFunction($signo) { global $pidFile, $exit; unlink($pidFile); echo "Daemon is exiting (signal: $signo).

我制作了一个守护程序脚本,当我按下ctrl-c键时,我的信号被调用,但不是在我的“系统”调用立即退出之前。我处理信号的全部目的是让“系统”调用在退出无限循环之前优雅地完成。 如何阻止kill命令退出系统调用

declare(ticks=1)

function exitFunction($signo) {
    global $pidFile, $exit;
    unlink($pidFile);
    echo "Daemon is exiting (signal: $signo). Removing pidFile: $pidFile\n";
    $exit = true;
};
//create the signal handler and shutdown function
pcntl_signal(SIGINT, "exitFunction");
pcntl_signal(SIGTERM, "exitFunction");

//create the pid file with our command
file_put_contents($pidFile, posix_getpid());

echo "pid: " . posix_getpid() . "\n";
echo "Time to start!\n";
while(!$exit) {
    echo "running $command...\n";
    system($command, $return);
    echo "done $command\n";
    if($return) {
        echo "didn't find any domains with command, so sleeping for 60...\n";
        sleep(60);
    }
}
注意:如果不使用分叉就无法处理来自“系统”的信号,那么请告诉我,我将使用分叉。我正在避免分叉,因为在我看来,分叉会使逻辑更加复杂,所以考虑到我的守护进程的串行性,我认为我应该明智地避免分叉


编辑:实现ctrl-c与kill不同。如果我使用kill,那么一切都会按预期工作,但是如果我按住ctrl-c键,无论捕捉到信号如何,我的系统调用都会终止(注意:信号仍然由ctrl-c键触发)。

如果没有分叉,这是不可能的。

键盘信号会发送到进程组中的所有进程。您需要分叉并使用
posix_setsid()
,以便
system()
在不同的进程组中运行。这就是原因!谢谢这就是答案。。。没有叉子,我就不能做我想做的事。