什麼是進程
定義:程序在計算機中的一次運行過程
程序:是一個可執行文件,是靜態的佔用磁盤空間,不佔用計算機的運行資源
進程:是一個動態過程的描述,佔用計算機的資源,有一定的生命週期
注意:同一個程序的不同運行過程是不同的進程,佔用資源和生命週期不一樣
進程的特徵
1.進程之間的運行互不影響,獨立運行
2.進程是操作系統分配資源的最小單位
3.每個進程獨立,各自佔用一定的虛擬內存
進程創建的流程
1.用戶啓動一個程序或者調用一個接口,發起創建進程
2.操作系統接收用戶的請求,開始創建進程
3.操作系統確定進程的狀態,爲進程分配資源和空間
4.操作系統將創建好的進程分配給程序
multiprocessing 模塊創建進程
使用multiprocessing中的Process類創建進程:
p = Process(target, args, kwargs, ')
其中參數,target爲子進程的方法名,arg爲給target函數按照位置傳參,kwargs爲給target函數按照字典傳參。簡單例子如下:
from multiprocessing import Process
from time import sleep
def worker(sec, name):
for i in range(3):
sleep(sec)
print("I'm %s" % name)
print("I'm working")
if __name__ == '__main__':
p = Process(target=worker, args=(2,), kwargs={"name": "lee"}, name='Worker')
p.start()
print("process name:", p.name) #進程名稱,自己可以改
print("process PID:", p.pid) #進程id
print("process is alive:", p.is_alive()) #進程狀態
p.join(3)
運行結果
process name: Worker
process PID: 10956
process is alive: True
I'm lee
I'm working
I'm lee
I'm working
I'm lee
I'm working
##其中worker方法爲子進程,if條件語句下爲父進程。
##其中子進程並不單單只是執行worker方法中的代碼,而是將if語句之前的代碼全部運行。父進程執行的是除worker方法外的所有代碼。
孤兒進程和殭屍進程
孤兒進程:
定義:父進程先於子進程退出,此時子進程就成爲孤兒進程
*孤兒進程會被操作系統指定的進程收養,系統進程就成爲孤兒進程的新的父進程
殭屍進程:
定義:子進程先於父進程退出,但是父進程沒有處理子進程的退出狀態,此時子進程就會成爲殭屍進程
*殭屍進程會存留少量PCB信息在內存中,大量的殭屍進程會消耗系統資源,應該避免殭屍進程的產生