程序,程式的乙個執行例項,正在執行的程式
描述程序的是pcb(process control block),程序控制塊,本質是個結構體
其中包含記憶體指標(程式的**和資料記憶體的什麼地方),程式計數器(),上下文資料(即將執行的指令),
識別符號pid(程序id),程序狀態,程序優先順序,記賬資訊(),io資訊(檔案資訊)
在liunx下,使用ps
或者ls /proc
系統檔案檢視
在**中使用getpid()
來檢視程序id
pid_t getpid(void)
型別時pid_t 這是乙個結構體型別
使用fork()
系統呼叫建立程序,父程序返回子程序的pid,子程序返回0,建立子程序失敗返回-1,這樣使用if就可以分辨父子程序,進行分流.
作業系統通過複製父程序建立子程序,因此父子程序資料獨有,**共享
int main()
else if(ret == 0)else
sleep(1);
return 0;
}
子程序也會執行相同的程式,這樣返回值就會出現不同
等會再說**,先看概念
程序的狀態
一般來說可以分為3大類
執行 就緒 阻塞
在linux下:
1.執行 ( r )
就是在執行
2.可中斷休眠(s)
也叫睡眠狀態,乙個簡單的操作就可以喚醒
3.不可中斷休眠(d)
磁碟休眠
4.停止狀態(t)
5.僵死狀態(z)
6.x死亡狀態(dead):這個狀態只是乙個返回狀態,你不會在任務列表裡看到這個狀態。
插播一下檢視程序狀態命令
ps aux / ps axj
在僵死狀態中,會產生殭屍程序,該程序僵死是因為資源洩露
為什麼會資源洩露呢,
父程序建立子程序,子程序先與父程序退出,由於要儲存退出資訊,作業系統要通知父程序獲取子程序的退出原因,因此不能直接釋放所有資源,要等待父程序獲取後才允許作業系統釋放資源,但是父程序沒有關注這個通知導致資源無法釋放,造成殭屍程序
如何避免
程序等待,父程序等待子程序退出
那麼要是父程序先於子程序退出怎麼辦,這樣程序就變成了孤兒程序,這個程序會在後台執行,被1號程序領養
liunx下程序相關命令
1.ps a 顯示現行終端機下的所有程式,包括其他使用者的程式。ps a 顯示所有程式。ps c 列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,引數或常駐服務的標示。ps e 此引數的效果和指定 a 引數相同。ps e 列出程式時,顯示每個程式所使用的環境變數。ps f 用ascii字元顯示...
liunx程序管理
程序是已啟動的可執行程式的執行中例項。proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資訊。每乙個程序的pid是唯一的,就算程序退出了,其它程序也不會占用其pid。程序是已啟動的可執行程式的執行中例項。proc目錄下以數字為名的目錄,每乙個目錄代表乙個程序,儲存著程序的屬性資...
Liunx 程序命令
ps命令作用 檢視靜態的程序統計資訊 例 ps aux 程序常用選項 a 顯示當前終端下的所有程序資訊。u 顯示以使用者為主的格式顯示程序資訊。x 顯示當前使用者在所有終端下的程序信。e 顯示系統內的所有程序資訊。l 使用長格式顯示程序資訊。f 使用完整格式顯示程序資訊。例 ps aux 命令 ps...