我有一个守护程序脚本,当我按下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);
}
}
注意:如果在没有分叉的情况下无法处理来自“系统”的信号,请告诉我,我将使用分叉。我正在避免分叉,因为IMO会使逻辑变得更复杂,所以考虑到我的守护进程的串行性质,我认为我应该明智地避开它。
编辑:实现ctrl-c与kill不同。如果我使用kill,那么一切都按预期工作,但是如果我ctrl-c我的系统调用就会死掉而不管捕获信号(注意:信号IS仍由ctrl-c触发)。答案 0 :(得分:0)
没有分叉是不可能的。