forking基礎應用

1.1 問題
編寫一個myfork.py腳本,實現以下功能:

在父進程中打印“In parent”然後睡眠10秒
在子進程中編寫循環,循環5次,輸出當前系統時間,每次循環結束後睡眠1秒
父子進程結束後,分別打印“parent exit”和“child exit”
1.2 方案
子進程運行時是從 pid = os.fork() 下面語句執行,實際上,該語句是兩條語句, os.frok() 是創建子進程語句,而 pid = 是賦值語句,所以在創建完子進程後,下一句爲運行賦值語句。

進程調用fork函數時,操作系統會新建一個子進程,它本質上與父進程完全相同。操作系統是將當前的進程(父進程)複製了一份(子進程),然後分別在父進程和子進程內返回。子進程接收返回值爲0,此時pid=0,而父進程接收子進程的pid作爲返回值。調用fork函數後,兩個進程併發執行同一個程序,首先執行的是調用了fork之後的下一行代碼。

此時,pid兩個值,同時滿足判斷語句if和else,按照順序執行如下:

父進程先執行:程序先輸出“In parent!”,然後父進程睡眠10s,即進程掛起10s

父進程掛起時,子進程開始執行:循環5次,每循環一次打印當前時間後睡眠1s,5s後結束五次循環,打印“child exit”,此時子進程已經結束

子進程接收後,父進程掛起尚未結束,當父進程睡眠時間結束後,打印“parent exit”,父進程也結束了。

1.3 步驟
實現此案例需要按照如下步驟進行。

步驟一:編寫腳本
`
[root@localhost day09]# vim myfork.py
#!/usr/bin/env python3
import os
import time
from datetime import datetime
pid = os.fork()
if pid:
print(“In parent!”)
time.sleep(10)
print(“parent exit”)
else:
for i in range(5):
print(datetime.now())
time.sleep(1)
print(“child exit”)
步驟二:測試腳本執行

[root@localhost day09]# python3 myfork.py
In parent!
2018-09-03 10:48:46.552528
2018-09-03 10:48:47.553714
2018-09-03 10:48:48.554800
2018-09-03 10:48:49.555901
2018-09-03 10:48:50.557035
child exit
parent exit

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章