我有一个过程,我正在分配一个子进程。一切似乎都运行良好,除了我想读取它所分叉的父进程中的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;
但是父级似乎不包含分叉进程的输出。为什么父级不包含子进程输出,即使它们共享父级的文件描述符?还有其他方法可以实现吗?