. 使用fork()创建2个子进程,让每个进程在屏幕上输出一个字符。 2. 编写一段程序,实现进程的管道通信。使用pipe()创建一条管道,子进程p1、p2分别向管道各写一句话,父进程从管道读出两个子进程的信息,显示在屏幕上。
时间: 2024-11-03 22:14:03 浏览: 40
在Unix/Linux系统中,可以使用`fork()`函数创建子进程,并结合一些标准库函数如`stdout`和`write()`来实现任务。这里是一个简单的Python示例,使用os模块模拟类似操作:
1. **使用 fork() 创建子进程并输出字符**
```python
import os
def print_char(pid):
if pid == 0: # 子进程
os.system("echo 'A'") # 输出字符 'A'
else: # 父进程
child_pid = os.fork()
if child_pid == 0:
os.system("echo 'B'")
else:
os.wait() # 等待子进程结束
print_char(os.getpid()) # 根据当前进程id判断是父还是子进程
```
2. **使用 pipe() 进程间通信**
```python
import os
import sys
# 创建管道
parent_pipe_rd, parent_pipe_wr = os.pipe()
def pipe_communication():
# 创建子进程p1
p1 = os.fork()
if p1 == 0: # 子进程p1
os.close(parent_pipe_rd) # 关闭父进程读端
os.dup2(parent_pipe_wr, sys.stdout.fileno()) # 将管道写端连接到标准输出
os.write(parent_pipe_wr, "Hello from P1\n".encode())
os.close(parent_pipe_wr)
os._exit(0) # 子进程退出
# 创建子进程p2
p2 = os.fork()
if p2 == 0: # 子进程p2
os.close(parent_pipe_wr) # 关闭父进程写端
os.dup2(parent_pipe_rd, sys.stdin.fileno()) # 将管道读端连接到标准输入
os.read(parent_pipe_rd, 1024)
os.close(parent_pipe_rd)
os._exit(0) # 子进程退出
# 父进程
os.close(parent_pipe_wr)
msg_p1 = os.read(parent_pipe_rd, 1024)
msg_p2 = ""
try:
msg_p2 = sys.stdin.readline().decode()
except:
pass
print(f"Parent received: {msg_p1.decode()}")
print(f"Parent read from stdin: {msg_p2}")
pipe_communication()
```
在这个例子中,子进程p1将字符串写入管道,然后关闭写端;子进程p2读取管道内容,关闭读端。父进程读取了p1写入的内容并在屏幕上展示。注意,为了演示简单,我们假设管道中的消息不超过1024字节。
阅读全文