Liunx下程序概念

2021-09-26 05:03:40 字數 1229 閱讀 6837

程序,程式的乙個執行例項,正在執行的程式

描述程序的是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...