標籤:splay close 讀寫 新博 載入 記憶體 except exit blog
好長時間沒有更新部落格內容了,最近一直在研究python,剛好瞭解多進程 那我們就一起瞭解一下多進程。(寫給自己看 怕自己忘了。。。)
1、什麼是進程?
進程指的是程式的一次執行過程,而程式則指的是一個檔案,磁碟中可執行檔代碼。
進程運行時需要把程式載入如記憶體,進程有一定的生命週期,進程的建立由作業系統控制,進程佔有系統的資源
2、進程的分類
IO密集型 : IO操作遠遠大於計算操作,因為CPU效能要遠遠高於IO的讀寫操作,所以這類程式一般cpu都處於等待IO啟動並執行狀態。
cpu密集型:程式中運算較多,IO較少,cpu佔用率高
3、進程式控制制塊 (PCB)
指的是在記憶體中開闢的存放進程資訊的空間。在linux下查看進程相關資訊:ps -aux
每個記憶體都有單獨佔有4G地址空間=======》存放在電腦的虛擬記憶體地址。
4、進程的狀態:
三態:
就緒 : 進程具備運行條件,等待系統分配資源
執行 : 進程佔有cpu開始運行
等待 : 又稱為阻塞態或者睡眠態,進程等待某種條件,或等待某件事件的完成
五態(在3態基礎上增加)
建立 : 建立一個進程, 直接表現為建立程式,或者建立子進程
終止 : 程式執行結束,完成善後,或處於殭屍狀態
進程狀態標識:
D : 等待態
S : 等待態
T : 等待態
R : 運行態,就緒態
Z : 殭屍態進程
N : 低優先順序的進程
< : 高優先順序
+ : 前台進程
linux 下進程相關命令
ps -aux 顯示進程資訊
ps -ef
ps -ajx
pstree 查看進程樹結構
top 檢測系統中的進程
進程優先順序 : linux 進程優先順序範圍 -20 --- 19 數字越小優先順序越高
nice -9 ./while 表示以9的優先順序運行某個程式
renice n pid 將pid的進程 優先順序修改為 n
kill -sig pid 給pid的進程發送一個sig訊號
./while.py & 將程式後台運行
5、建立進程:
fork 建立新的進程 (linux 和unix 平台)
import os
fork()
功能 : 為當前進程,建立一個子進程
參數: 無
傳回值:
< 0 表示建立進程失敗
= 0 在新建立的進程中返回一個傳回值
> 0 在父進程中返回一個傳回值
父子進程 :
子進程會繼承父進程幾乎全部的程式碼片段
子進程擁有自己獨立的資訊標識
* 子進程和父進程都是獨立存在的,在運行上相互不影響
* 利用fork傳回值在父子進程中的不同去執行不同的內容,是多任務的固定方法
* 父進程中fork的傳回值為建立的子進程的PID號
* 父子進程幾乎擁有相同的資源,包括fork前所定義的內容
1 import os 2 from time import sleep 3 4 a = 10 5 #建立子進程 6 pid = os.fork() 7 8 if pid < 0: 9 print(‘create process failed‘)10 elif pid == 0:11 a = 100012 print("This is child process")13 else:14 sleep(2)15 print(‘The pid = ‘,pid)16 17 print("This is parent process")18 19 print(‘a = ‘,a)20 print("**********the end***********")View Code
import os
os.getpid() 擷取當前進程的PID號
os.getppid() 擷取當前進程父進程的PID號
進程退出函數
import os
os._exit([status])
import sys
sys.exit([status])
功能 : 退出一個進程
1 import os 2 import sys 3 4 a = 0 5 while a < 10: 6 print(‘a = ‘,a) 7 a += 1 8 try: 9 if a == 5:10 # sys.exit(3)11 os._exit(0)12 except SystemExit as e:13 print(e)14 15 print("+++++++++++++++++")
參數 : 表示進程的退出狀態,0表示進程正常退出,非0表示異常退出。sys.exit()可以傳入字串,在退出時列印一下字串
區別 : _exit() 直接退出
exit() 拋出SystemExit,如果要是處理了異常
殭屍進程:子進程先於父進程退出,父進程沒有處理子進程的退出狀態,此時子進程就會成為殭屍進程
python多進程