从父进程中的分叉进程读取输出

时间:2018-02-09 11:02:41

标签: php fork

我有一个过程,我正在分配一个子进程。一切似乎都运行良好,除了我想读取它所分叉的父进程中的stdout/stderr。有没有办法做到这一点?

据我所知,分叉进程继承了父的文件描述符,包括标准输入和标准输出,所以我尝试缓冲输出并使用输出缓冲最后读取它。粗略地说,这是它的样子:

ob_start();

$fork = pcntl_fork();

switch($fork) {
    case 0:
        echo "Child of: " . posix_getppid() . ". My Process ID is: " . posix_getpid() . PHP_EOL;
    break;
    case -1:
        echo "Forking failed!" . PHP_EOL;
    break;
    default:
        pcntl_wait($status); // store the child's exit status
        echo "I am parent with ID: " . posix_getpid() . ". My Child's ID is: $fork and it's exit status is:           $status" . PHP_EOL;
    break;
}

$output = ob_get_clean();

echo 'Process id – ' . posix_getpid() . PHP_EOL;
echo $output;

但是父级似乎不包含分叉进程的输出。为什么父级不包含子进程输出,即使它们共享父级的文件描述符?还有其他方法可以实现吗?

0 个答案:

没有答案