进程间通信
进程间通信允许程序员在不同进程之间进行通信。例如,让我们考虑一下我们需要编写一个可以运行 bash 命令并打印输出的 PHP 应用程序。我们将使用 proc_open
,它将执行命令并返回我们可以与之通信的资源。以下代码显示了从 php
运行 bash
中的 pwd
的基本实现
<?php
$descriptor = array(
0 => array("pipe", "r"), // pipe for stdin of child
1 => array("pipe", "w"), // pipe for stdout of child
);
$process = proc_open("bash", $descriptor, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], "pwd" . "\n");
fclose($pipes[0]);
echo stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value = proc_close($process);
}
?>
proc_open
使用 $descriptor
作为描述符规范运行 bash
命令。之后我们使用 is_resource
来验证过程。完成后,我们可以使用根据描述符规范生成的 $ pipes 开始与子进程交互。
之后我们可以简单地使用 fwrite
来写入子进程的 stdin。在这种情况下,pwd
接着回车。最后 stream_get_contents
用于读取子进程的 stdout。
始终记得使用
proc_close()
来关闭子进程,proc_close()
将终止子进程并返回退出状态代码。