Linux基礎 程序管理

2021-07-02 23:54:50 字數 2363 閱讀 8695

程序是作業系統上非常重要的概念,所有系統上面跑的資料都會以程序的型別存在。在 linux 系統當中:觸發任何乙個事件時,系統都會將它定義成為乙個程序,並且給予這個程序乙個 id,稱為 pid,同時根據觸發這個程序的使用者,給予這個 pid 一組有效的許可權設定。

程式執行起來後,我們看不到也摸不著。因此 linux 為我們提供了一系列方便的命名來檢視正在執行的程序。首先是 ps 命令,比如ps -l命令能檢視當前 bash 下的相關程序全部資訊。如下:

123

45

$ ps -l

f s uid pid ppid c pri ni addr sz wchan tty time cmd

0 s 1000

2552

2538080

0 - 1945

wait pts/0

00:00:00 bash

0 s 1000

9352

2552080

0 - 1926

wait pts/0

00:00:00 bash

0 r 1000

9478

9352080

0 - 1598 - pts/0

00:00:00 ps

另外,我們還可以用pstree命令來顯示整棵程序樹。

可以看到這裡 init 程序是所有程序的根節點,使用ps命令還能看到 init 的 pid 為 1 。當linux啟動的時候,init 是系統建立的第乙個程序,這一程序會一直存在,直到我們關閉計算機。所有其他的程序都是由 init 程序衍生出來的。

上面提到所謂的「衍生出來的程序」正是 linux 的父子程序的概念。當我們登入系統後,會取得乙個 bash shell,然後我們利用這個 bash 提供的介面去執行另乙個命令,例如bash或者ps等。那些另外執行的命令也會被觸發成為 pid,那個後來執行的命令產生的 pid 就是「子程序」,而原本的 bash 環境下,就稱為「父程序」了。

老程序成為新程序的父程序(parent process),而相應的,新程序就是老的程序的子程序(child process)。乙個程序除了有乙個pid之外,還會有乙個ppid(parent pid)來儲存的父程序 pid。如果我們循著 ppid 不斷向上追溯的話,總會發現其源頭是 init 程序。所以說,所有的程序也構成乙個以 init 為根的樹狀結構。

我們使用ps -o命令來看一看現有的程序。

123

45

$ ps -o pid,ppid,comm

pid ppid command

2552

2538 bash

9352

2552 bash

9625

9352

ps

我所做的操作是在原來的 bash shell 中執行了 bash 命令,然後又執行了 ps 命令。我們可以看到,第二個程序 bash 是第乙個程序 bash 的子程序,而第三個程序ps是第二個程序的子程序。

當計算機開機的時候,核心(kernel)只建立了乙個 init 程序。linux kernel 並不提供直接建立新程序的系統呼叫。剩下的所有程序都是 init 程序通過 fork 機制建立的。新的程序要通過老的程序複製自身得到,這就是 fork。fork 是乙個系統呼叫。程序存活於記憶體中。每個程序都在記憶體中分配有屬於自己的一片空間 (記憶體空間,包含棧、堆、全域性靜態區、文字常量區、程式**區)。當乙個程式呼叫 fork 的時候,實際上就是將上面的記憶體空間,又複製出來乙個,構成乙個新的程序,並在核心中為該程序建立新的附加資訊 (比如新的 pid,而 ppid 為原程序的 pid)。此後,兩個程序分別地繼續執行下去。新的程序和原有程序有相同的執行狀態(相同的變數值,相同的指令…)。我們只能通過程序的附加資訊來區分兩者。

程式呼叫 exec 的時候,程序清空自身的記憶體空間,並根據新的程式檔案重建程式**、文字常量、全域性靜態、堆和棧(此時堆和棧大小都為 0),並開始執行。

這個工作管理(job control)是用在 bash 環境下的,也就是說,當我們登入系統取得 bash shell 之後,在單一終端機下可以同時進行多個工作的行為管理。

假如我們只有乙個終端,因此在可以出現提示符讓你操作的環境就成為前台(foreground),至於其他工作就可以放在後台(background)去暫停或執行。

工作管理的意義在於將多個工作囊括在乙個終端,並取其中的乙個工作作為前台,來直接接收該終端的輸入輸出以及終端訊號。 其他工作在後台執行。

linux基礎程序管理

linux程序管理常涉及到的命令有ps top nice kill jobs等 1.程序定義 程序 process 是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。在早期面向程序設計的計算機結構中,程序是程式的基本執行實體 在當代面向執行緒設...

Linux基礎 程序管理

ps a 顯示現行終端機下的所有程式 ps u 以使用者為主的格式來顯示程式狀況 ps x 不以終端機來區分 輸出字段含義 user 執行程序的使用者 pid 程序id cpu cpu佔用率 mem 記憶體佔用率 vsz 占用虛擬記憶體 rss 占用實際記憶體 tty 程序執行的終端 stat 程序...

Linux基礎入門 Linux程序管理

程序前後臺與狀態 程式是一組指令及引數的集合,按照既定的邏輯控制計算機執行用來完成特定任務 程序則是執行著的程式,是作業系統執行的基本單位,是程式執行的過程,動態,有生命週期及執行狀態 程式和程序的區別 程式是靜態的,它只是一組指令的集合,不具有任何的執行意義。而程序是程式執行的動態過程 程序和程式...