我的应用程序使用proc_open派生了一个PHP后台进程。每天要执行数千次,而且效果很好。但是,当我使用proc_get_status
检查过程时,每小时会得到running=false
代码大致如下:
$process = proc_open( '/usr/bin/php -f file.php &', [], $pipes );
if( ! $process ){
throw new Exception('proc_open failed'); // <- never happens
}
$stat = proc_get_status($process);
if( ! $stat['running'] ){
throw new Exception('Process not running'); // <- fails here
}
发生这种情况时,统计信息会给出:
{"running":false,"signaled":false,"stopped":false,"exitcode":0,"termsig":0,"stopsig":0}
。
该脚本可以长时间运行,因此除非抛出错误,否则退出速度不能如此之快。我已经验证脚本确实可以成功运行。唯一的问题是,除非我在前台运行它,否则我无法检查它是否启动。
什么能导致统计信息显示proc_open调用成功后脚本未运行?