启动进程并获取其返回代码,如果持续时间过长则中断它

时间:2010-01-04 13:37:24

标签: php asynchronous background-process

我从命令行启动了PHP脚本(也称为CLI模式,不涉及网络服务器)。

在这个脚本中,我启动一个将在一段时间后运行的命令,通常在几分钟后退出。但有时候,由于各种各样的问题,这个命令会运行几个小时,我能做的最好就是杀掉它并等待一段时间然后再启动它。

我想强调的两点:

  • 我无法控制该命令中的代码,也无法改善故障检测。
  • 这不是一项重要的任务,让它以这种方式工作是完全可以的。

话虽这么说,我想在我的代码中改进一些东西,这样如果命令运行的时间超过N秒,我就可以杀死子进程。但是当它运行正常时,我仍然希望从命令中获取返回代码。

伪代码应该是这样的:

Launch command
While command is running
{
    If the command is done running
    {
        echo return code
    }
    else
    {
        If the command has been running for more than N seconds
        {
            Kill the child process
        }
    }
}

你将如何在PHP中实现它?

谢谢!

解决方案:我最终使用了SIG_ALERT信号。有关the pages provided by Gordonhis post中信号处理和pcntl库的更多信息。

1 个答案:

答案 0 :(得分:1)

仔细阅读this ChapterPractical PHP Programming。 它涵盖了与流程的广泛互操作。还可以查看Process Control上的PHP手册页面。

您可能也对Gearman

感兴趣

很抱歉没有提供任何代码。我从来不需要过程控制的东西,所以我只是留在内存中,以防万一我需要它。