Linux系統程式設計(2) 程序概念

2021-09-21 07:08:47 字數 1720 閱讀 4696

程序:乙個可執行程式跑起來,作業系統就建立乙個程序。

ps:顯示當前程序

ps aux:顯示當前所有程序

ps aux | less:分頁顯示所有程序(方便檢視)

注:前幾個資訊是:user:程序建立使用者;pid:身份識別符號 ;cpu占用;mem:記憶體占用空間......

ps aux | grep test[程序名]:字元篩選顯示所有程序(方便檢視,這個是篩選test程序[程序名])

注:敲下的命令,在命令的執行過程中,也是一種程序

程序和可執行程式的區別:

二者沒有關聯,可執行程式是檔案,程序會在記憶體載入資料。因此刪除掉檔案,程序依舊存在。

程序的管理(作業系統的核心負責):1.描述程序(pcb程序控制塊->就是乙個結構體(task_struct))

task_struct是乙個很大的結構體,有很多內容。

2.組織程序

雙向鍊錶進行組織,每乙個結點都是 task_struct。

task_struct含有什麼(關鍵的兩個):r(ready):就緒狀態,程序在就緒佇列中,就會處於這種狀態。

s(sleep):睡眠狀態,暫時還輪不到。

d:深度睡眠狀態,密集的進行io操作的時候經常出現,例如程式崩潰的時候核心轉儲檔案(吐核、臨終遺言)會經常出現。

t(stop):暫停,掛起後台

t(trace):跟蹤

x:程序已經結束,這個只是在linux原始碼中才可以看到,現實中的看不到了

z:殭屍程序,和父程序子程序這些東西有關聯

注:__pid 和 pid_t 和 int 是等價的 ; getpid:獲取程序的pid     getppid:獲取父程序的pid

1.返回值:一次呼叫,有兩個返回值;父程序返回子程序的pid;返回0表示子程序;通常需要讓父程序的執行不同的邏輯,就可以借助fork的返回值來區分;如果失敗返回 < 0 的結果------a)記憶體不夠     b)程序數量太多,達到上限

注:乙個父程序有多個子程序,所以要返回子程序pid

2.執行過程

父子程序都跟隨fork來執行。

方式:並行 vs 併發

並行:兩個cpu執行兩個程序

併發:乙個cpu分別執行兩個程序

危害:記憶體洩露

處理:直接 kill 是殺不掉子程序的,可以 kill 殭屍程序的父程序。更科學的處理是程序等待。

為什麼 kill 父程序,子程序就沒了?

因為 kill 父程序之後,子程序就成為孤兒程序。孤兒程序就會被我們 1 號程序收養,然後釋放。但是孤兒程序和殭屍程序不是乙個東西。

孤兒程序:不是一種程序狀態

指的是父程序結束了,但是子程序還在,子程序的父親就變成1號程序(通用名字:init,所有程序的祖宗)。

Linux系統程式設計之程序

程序狀態 4 5種 就緒 初始化 執行,掛起 等待 停止 pbc成員 1 程序id 2 程序狀態 3 程序切換需要儲存和恢復的cpu暫存器 4 描述虛擬位址空間資訊 5 描述控制終端的資訊 6 當前工作目錄 7 umask掩碼 8 檔案描述符 9 訊號相關的資訊 10 使用者和使用者組id 11 會...

linux系統程式設計 多程序

最近發現每天都在寫業務 好多基礎的東西都忘了,今天開始每天覆習一點基礎知識。今天先複習多程序 程序是具有一定功能的程式的一次執行活動,是系統資源分配和排程的基本單位 孤兒程序 父程序退出,子程序沒有退出,被init程序收養 init程序 是核心啟動後執行的第乙個程序,是所有孤兒程序的子程序。init...

《Linux系統程式設計 程序管理》

在linux的核心的五大組成模組中,程序管理模組時非常重要的一部分,它雖然不像記憶體管理 虛擬檔案系統等模組那樣複雜,也不像程序間通訊模組那樣條理化,但作為五大核心模組之一,程序管理對我們理解核心的運作 對於我們以後的程式設計非常重要。同時,作為五大組成模組中的核心模組,它與其他四個模組都有聯絡。下...