作者:手机用户2502904917 | 来源:互联网 | 2022-12-01 23:11
此PHP命令行脚本使用proc_open()运行另一个脚本:
array("pipe", "r"),
1 => array("pipe", "w")
);
$crash = proc_open('php crash.php', $descriptorspec, $pipes);
$status = proc_get_status($crash);
print_r($status);
内部脚本故意崩溃:
我希望proc_get_status()告诉我进程不再运行,并且退出代码为255.
但是,这是输出:
Array
(
[command] => php crash.php
[pid] => 78769
[running] => 1
[signaled] =>
[stopped] =>
[exitcode] => -1
[termsig] => 0
[stopsig] => 0
)
为什么状态仍显示为正在运行?
(我不能在我的实际用例中使用proc_close(),因为我特别希望将多个内容传递给内部脚本并查看哪个导致它崩溃.)
1> Gasol..:
我修改了你的代码以添加while循环来监视running
返回的值proc_get_status
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