能否创建一条管道,实现两个子进程之间的通信,如果可以,请实现并给出代码。如果不可以,请说明理由
时间: 2024-10-27 17:05:59 浏览: 15
在Unix/Linux系统中,确实可以使用`pipe()`函数创建一条管道,实现两个子进程之间的数据通信。这是一种半双工通信机制,即数据只能单向流动,从父进程流向子进程或从子进程流向父进程。
以下是一个简单的Python示例,使用`subprocess`模块创建一个管道,并在两个子进程中通过这个管道传递数据:
```python
import subprocess
# 创建一个管道连接
parent_conn, child_conn = pipe()
# 子进程处理连接
def child_process(conn):
data = conn.recv() # 父进程发送数据
print(f"Child received: {data}")
conn.send("I got it!")
# 父进程启动子进程并传递数据
child = subprocess.Popen(["python", "-c", "import sys; sys.stdin.read(); sys.stdout.write('Data from parent')"], stdin=child_conn, stdout=subprocess.PIPE)
child.wait()
# 父进程写入管道然后关闭
data = "Hello from parent"
parent_conn.send(data.encode()) # 发送数据到管道
parent_conn.close()
# 关闭子进程的输入端口
child_conn.close()
```
在这个例子中,父进程先启动一个子进程,子进程会读取来自管道的数据。然后,父进程将数据写入管道,等待子进程确认收到。完成后,父进程关闭其管道端口,子进程的输出也被阻塞直到接收完整个数据。
阅读全文