此PHP命令行脚本使用 proc_open()运行另一个脚本:
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
);
$crash = proc_open('php crash.php', $descriptorspec, $pipes);
$status = proc_get_status($crash);
print_r($status);
内部脚本只是故意崩溃:
<?php
crash();
我希望 proc_get_status()告诉我该进程不再运行,并且退出代码为255。
但是,这是输出:
Array
(
[command] => php crash.php
[pid] => 78769
[running] => 1
[signaled] =>
[stopped] =>
[exitcode] => -1
[termsig] => 0
[stopsig] => 0
)
为什么状态仍显示为正在运行?
(在我的实际用例中,我不能使用proc_close(),因为我特别想将多个内容传递给内部脚本,并查看导致它崩溃的原因)。
答案 0 :(得分:5)
我已修改您的代码,以添加while循环来观看running
返回的proc_get_status
值
<?php
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w")
);
$crash = proc_open('php crash.php', $descriptorspec, $pipes);
while (true) {
$status = proc_get_status($crash);
print_r($status);
sleep(1);
}
运行上面的代码将并排输出两个数组,第二个也应将running
显示为false
,延迟1秒足以显示竞争状况的问题。
$ php modified_demo.php
Array
(
[command] => php crash.php
[pid] => 32575
[running] => 1
[signaled] =>
[stopped] =>
[exitcode] => -1
[termsig] => 0
[stopsig] => 0
)
Array
(
[command] => php crash.php
[pid] => 32575
[running] =>
[signaled] =>
[stopped] =>
[exitcode] => 1
[termsig] => 0
[stopsig] => 0
)
^C