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

Php 启动一个进程并获取其返回代码,如果持续时间过长,则中断该进程,php,asynchronous,background-process,Php,Asynchronous,Background Process,我有一个从命令行启动的PHP脚本(也称为CLI模式,不涉及Web服务器) 在这个脚本中,我启动了一个从某个时间开始运行的命令,通常在几分钟后退出。但有时,由于各种问题,该命令会运行数小时,我所能做的就是杀死它并等待一段时间,然后再次启动它 我想强调两件事: 我无法控制该命令中的代码,也无法改进故障检测 这不是一项重要的任务,让它以这种方式工作是完全可以的 也就是说,我希望改进代码中的内容,以便在命令运行超过N秒时可以终止子进程。但我仍然希望在命令运行正常时从命令中获取返回代码 伪代码应该是这

我有一个从命令行启动的PHP脚本(也称为CLI模式,不涉及Web服务器)

在这个脚本中,我启动了一个从某个时间开始运行的命令,通常在几分钟后退出。但有时,由于各种问题,该命令会运行数小时,我所能做的就是杀死它并等待一段时间,然后再次启动它

我想强调两件事:

  • 我无法控制该命令中的代码,也无法改进故障检测
  • 这不是一项重要的任务,让它以这种方式工作是完全可以的
也就是说,我希望改进代码中的内容,以便在命令运行超过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_警报信号。有关信号处理和pcntl库的详细信息,请参阅。 它广泛地涵盖了与流程的互操作。还可以查看上的PHP手册页面

您可能也对以下内容感兴趣:


很抱歉没有提供任何代码。我从来都不需要过程控制的东西,所以我只是在记忆中保留在哪里,以备需要。

我一般都知道Gearman、Bearstack和消息队列,实际上我在同一个项目中使用Gearman,但目的完全不同。在这里,我不需要排队……我只想运行那个命令,如果它花费太多时间,就杀死它。不提供代码一点问题都没有。看起来你提供的链接对我很有用:)