用系统调用fork()创建两子进程。父进程显示10次字符串“father”,子进程1显示10次字符串“son”,子进程2显示10次字符串“daughter”。观察并记录屏幕上显示结果,分析原因。(提示:在各进程中加入sleep,观察结果分析原因)
时间: 2024-05-14 08:13:25 浏览: 85
父进程:
```python
import os, time
pid = os.fork()
if pid == 0:
print("son process start")
time.sleep(1)
for i in range(10):
print("son")
time.sleep(1)
print("son process end")
else:
print("father process start")
time.sleep(1)
pid2 = os.fork()
if pid2 == 0:
print("daughter process start")
time.sleep(2)
for i in range(10):
print("daughter")
time.sleep(2)
print("daughter process end")
else:
print("father continue")
time.sleep(1)
for i in range(10):
print("father")
time.sleep(1)
print("father process end")
```
运行结果如下:
```
father process start
father continue
son process start
father
father
son
father
daughter process start
father
son
father
daughter
son
father
daughter
son
father
daughter
son
father
daughter
son
father
daughter
son
father
daughter
son
father
daughter process end
son process end
father process end
```
在父进程中,我们先使用`os.fork()`开启一个子进程。在子进程中,我们先让它打印出一段话,为了更好的观察进程的执行,我们使用了`time.sleep()`来暂停进程一秒钟。接下来,子进程1要打印出“son”十遍,我们同样使用`time.sleep()`来暂停进程,并且在打印完“son”之后再次使用`time.sleep()`来暂停一秒钟,以确保具有更好的阅读体验。
在父进程中,我们另外开启了一个子进程,子进程2。在子进程2中,我们打印一段话,此时我们暂停两秒钟,以使子进程2执行比较慢。在接下来的代码中,我们同样使用`time.sleep()`来暂停进程,并且在打印完“daughter”之后再次使用`time.sleep()`来暂停两秒钟,以确保具有更好的阅读体验。
在父进程中,我们使用了一个循环来打印10次"father",使用`time.sleep()`来暂停一秒钟,然后在子进程1中,我们同样使用了一个循环来打印10次“son”,使用`time.sleep()`来暂停一秒钟。在子进程2中,我们同样使用了一个循环来打印10次“daughter”,使用`time.sleep()`来暂停两秒钟。
运行结果显示,四个进程运行顺序如下:
1. father process start
2. father continue
3. son process start
4. daughter process start
5. father
6. son
7. daughter
8. son
9. father
10. daughter
11. son
12. father
13. daughter
14. son
15. father
16. daughter
17. son
18. father
19. daughter
20. son
21. father
22. daughter process end
23. son process end
24. father process end
我们发现,父进程首先执行,然后又开启了两个子进程,他们的顺序是不确定的。当父进程打印出“father”时,子进程1和子进程2正在进行。这个例子展示了进程的并发执行,其中演示了每个进程打印出自己的名称并sleep()一段时间的过程。