此 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(),因为我特别想将多个东西传递给内部脚本并查看哪个导致它崩溃。)
最佳答案
我修改了您的代码以添加 while 循环以观察 proc_get_status
返回的 running
值
<?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
关于php - 为什么 proc_get_status() 不显示进程已崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52871286/