php - 为什么 proc_get_status() 不显示进程已崩溃?

标签 php

此 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);
}

运行上面的代码将并排输出两个数组,第二个应该显示 runningfalse 以及,延迟 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/

相关文章:

javascript - 输入选择变量

javascript - 属性符合我的值(value)

php - 如何将文本转换为 phpbb 哈希?

php - 具有不同填充百分比的饼图

php - 使用 PHP 打开或创建文件时权限被拒绝

php - 在谷歌地图 API 上设置折线颜色的条件

javascript - 如何使用 Javascript 从 URL 获取 HTTP header (Content-Type)

php - 获取mysql中最近记录的组的所有id

php - 如何最大化 Get 查询长度?

javascript - 函数返回 bool 时如何使用不同的 SweetAlert?