程序根據字面意思,無非就是正在執行或者正在執行的程式。
但是在核心觀點上理解,它就是擔任分配系統資源的實體。
在linux中,每乙個程序都由task_struct 資料結構來定義,而它就是我們常說的pcb(process control block),它是對程序控制的唯一手段,也是最有效的手段,他對被裝載到ram裡幷包含這程序的資訊。
task_struct內容的簡述:
程序的狀態:記錄程序的狀態,等待,執行或者阻塞等等
識別符號:描述本程序的唯一識別符號,用來區別其他程序
優先順序:和其他程序相比優先順序的大小
記憶體指標:指向程式執行的**和資料
上下文資料:cpu在對程序進行切換排程時,儲存資料
io狀態資訊:包含顯示的io請求,分配給程序的io裝置和被程序使用的檔案列表
記賬資訊 :可能包括處理器時間總和,使用的時鐘總和,時間限制,記賬號等
其他資訊
ps -ef 檢視所有的程序資訊
ps -ef|grep ***(可執行的程式) 檢視某乙個可執行程式具體的程序資訊
ps aux 檢視的比較詳細
top 能夠實時顯示系統中各個程序的資源占用狀況
getpid 系統呼叫介面,在**中獲取程序pid
我們通常使用fork指令來建立乙個程序,我們可以使用man fork來了解linux下fork的相關概念。
使用fork系統呼叫通過複製呼叫程序來建立乙個新的程序,呼叫程序我們稱之為父程序
建立出來的新程序稱之為子程序
fork函式對於父程序來說,返回值是子程序的pid
對於子程序來說,返回值是0;
因為子程序是以父程序為模板來建立的,因此父子程序的**段是完全一樣的,也就是說他們執行的程式是一樣的,我們使用者就是通過對返回值的判斷來分辨父子程序,來進行**分流,父子程序返回值不同,公用同乙個**段,但是他們的資料並不共用。
#include#include#includeint main()
else if(ret == 0)else
sleep(1);
return 0;
}
我們在linux核心種可以看到程序的不同狀態。
r running (執行狀態) 並不意味著程序一定在執行,它表明程序要麼在執行當中,要麼在執行佇列之中
s sleeping (睡眠狀態) 程序在等待時間完成
d disk sleep (磁碟休眠狀態) 也可以叫作不可中斷睡眠狀態,在這個狀態的程序通常會等待io的結束
t stopped (停止狀態) 可以通過傳送sigstop訊號來停止程序,這個暫停的程序可以通過傳送sigcont讓程序繼續執行
x dead (死亡狀態) 這是乙個返回狀態,不會再任務列表中看到
(1)殭屍程序
產生原因:子程序先於父程序退出,它要保留退出原因在pcd中,incident退出後不會釋放所有資源,子程序退出後作業系統會通知父程序 這個家屬說子程序退出了,你去獲取一下原因,然後完全釋放子程序資源,假如父程序不管子程序的退出狀態,那麼這個子進 程將進入將死狀態,,成為殭屍程序。
z+狀態就是殭屍態
危害:父程序建立了子程序,但是沒有**,這個殭屍程序一直佔著資源,沒有釋放,就造成了資源的洩漏。
(2)孤兒程序
父程序先於子程序退出,子程序將成為孤兒程序。 父程序變成init程序,子程序如果後來退出了,init程序將負責釋放資源,init程序
將負責釋放資源,所以孤兒程序最後不會變成殭屍程序。
#include#include#includeint main()
else if(id==0)
else
return 0;
}
Linux 程序的概念
1 程序的概念 正在執行的程式 由一條條指令構成 資料 資源 2 作業系統對程序的管理 僵死程序 殭屍程序 程序實體已經釋放,但pcb結點並沒有被釋放 退出碼 在pcb 有退出碼才會退出 1 概念 乙個程序執行結束,但是程序的pcb沒有被系統釋放程序結束後,在pcb中還要儲存程序的退出碼,以備其父程...
Linux程序的概念
呼叫fork函式後,會建立乙個子程序,並且父子兩個程序都從fork處執行,fork函式有兩個返回值,對於父程序會返回子程序的pid,此時pid會大於0,對於子程序來說,pid會等於0。include 獲取子程序的狀態 include 獲取子程序的狀態 include 程序標頭檔案 include i...
Linux 程序概念
任何計算機系統都包含乙個基本的程式集合,成為作業系統 os 它包括 作業系統是管管理的軟體 使用者操作 使用者操作介面 shell,lib,指令等 作業系統 驅動程式 硬體 作業系統管理硬體 系統呼叫 在開發者角度,作業系統會對外表現為乙個整體,但是會暴露自己的一部分介面供上層開發者使用,這部分由作...