Linux 作業系統 程序管理命令

2021-10-07 06:20:10 字數 4545 閱讀 5173

執行任務管理的操作中,每個任務都是目前 bash 的子程序,即彼此之間是有相關性的。我們無法用任務管理的方式由 tty1 的環境去管理 tty2 的 bash。

要執行 bash 的任務管理需要注意:

直接將命令丟到後台中執行

使用符號【&】可以將某些任務直接丟到後台環境中,讓我們可以繼續操作前台的任務。例如使用 tar 命令將/etc備份時放入後台,並利用資料流重定向將輸出資料傳送到某個檔案中:

tar -zpcvf /tmp/etc.tar.gz /etc > /tmp/log.txt 2>

&1 &

將目前任務丟到後台中暫停

使用【ctrl+z】將目前執行的程序丟到後台中等待。例如在使用 vim 過程中按【ctrl+z】來暫時退出到前台中。然後可以使用命令【jobs】來檢視目前的後台任務狀態。

jobs

[-lrs]

選項與引數:

-l:除了累出 job number 與命令串,還列出 pid 號碼

-r:列出正在後台 run 的任務

-s:列出正在後台 stop 的任務

將後台任務拿到前台處理

使用命令【fg】可以將後台任務拿到前台來處理

fg %jobnumber

選項與引數:

%jobnumber:jobnumber 為任務號碼

讓任務在後台下的狀態變為執行中

【ctrl+z】可以讓目前任務丟到後台下面暫停,而命令【bg】則可以讓後台暫停的任務變為執行。

bg %jobnumber
管理後台任務

使用命令【kill】可以刪除後台的任務

kill -signal %jobnumber

kill -l

選項與引數:

-l:列出目前 kill 能使用的訊號

signal:表示給予後面接的任務什麼樣的指示

-1:重讀一次引數配置檔案

-2:與 ctrl+c 同樣操作

-15:正常方式結束任務

任務管理中的【後台】是在終端模式下的情況,即 bash 的後台,而不是放在了系統的後台中,如果使用遠端連線方式將任務以 & 的方式放在後台,在離線的情況下該任務不會繼續執行。

使用【nohup】命令可以再離線或登出系統後,還能讓任務繼續執行。

nohup

[命令與引數]

# 在終端前台執行

nohup

[命令與引數]

在終端後台執行

linux 系統中,觸發任何乙個事件時,系統都會將它定義為乙個程序,並給予該程序乙個 pid,同時根據觸發程序的使用者與相關屬性關係,基於這個 pid 一組有效地許可權設定。也就是說,當我們執行乙個程式或命令時就可以觸發乙個時間而獲得 pid,而不同身份的使用者執行程式時,系統給予該程序的許可權也不同。

一些常駐在記憶體中的程序稱為服務(daemon),負責一些系統所提供的功能以服務使用者的各項任務。

檢視程序可以利用靜態的 ps 或是動態的 top 命令,還可以利用 pstree 來檢視程序樹之間的關係

顯示某個時間點的程序運**況

ps aux		# 檢視系統所有的程序

ps -l # 僅檢視自己的 bash 相關程序

使用【ps -l】僅會列出與你的操作環境 bash 有關的程序,即最上層的父程序會是你自己的 bash。

如上面的 ps 程序,其父程序 ppid 則是當前 bash 的 pid。其中 f 表示程序標識,4 表示程序許可權為 root,1 表示此子程序僅執行複製而沒有實際執行。s 表示程序狀態,r 為執行,s 為睡眠可被喚醒,d 為不可喚醒睡眠,t 為停止,z 為將是狀態,即程序已終止但無法被刪除至記憶體外。

殭屍程序:造成殭屍程序的原因通常是該程序以及執行完畢,或應該終止了,但該程序的父程序無法完整地將該程序結束,造成該程序一直存在記憶體當中。如果某程序的 cmd 後面接了時,就代表該程序時殭屍程序。

動態檢視程序的變化

【top】命令可以持續檢測程序執行的狀態。

top

[-d 數字]

|top

[-bnp]

# 選項和引數

# -d:後面可以接秒數,整個程序介面更新的時間,預設 5 秒

# -b:批量方式執行 top

# -n:與 -b 搭配使用,需要執行幾次 top 的輸出結果

# -p:指定某些 pid 來監測

# 在 top 執行過程中可以使用的按鍵命令:

# ?:顯示 top 中可輸入的按鍵命令

# p:以 cpu 使用排序

# m:以記憶體使用排序

# q:退出 top

如果想要找程序之間的相關性,可以使用命令【pstree】。根據 pstree 的輸出我們可以清楚,所有的程序都是依附在 systemd 這個程序下面的。而這個程序的 pid=1,因為它是由 linux 核心主動呼叫的第乙個程序。

pstree [-a|u]

[-up]

# 選項與引數:

# -a:各程序樹之間用 ascii 字元連線

# -u:各程序樹之間用 unicode 字元連線

# -p:同時列出每個程序 pid

# -u:同時列出每個程序所屬賬號名稱

通過給予程序乙個訊號來管理程序,常用的訊號如下:

代 號名稱內容1

sighup

啟動被終止的程式,可讓該pid 重新讀取自己的設定檔,類似重新啟動

2sigint

相當於用鍵盤輸入[ctrl]-c 來中斷乙個程式的進行

9sigkill

代表強制中斷乙個程式的進行,如果該程式進行到一半, 那麼尚未完成的部分可能會有『半產品』產生,類似vim會有.filename.swp 保留下來。

15sigterm

以正常的結束程式來終止該程式。由於是正常的終止, 所以後續的動作會將他完成。不過,如果該程式已經發生問題,就是無法使用正常的方法終止時, 輸入這個signal 也是沒有用的。

19sigstop

相當於用鍵盤輸入[ctrl]-z 來暫停乙個程式的進行

kill -signal pid

【kill】可以將訊號傳送給某個任務或 pid。

killall -signal 命令名稱

kill 後面必須加上 pid,而使用 killall 命令可以利用【執行命令的名稱】來給予訊號。

killall

[-iie]

[command name]

# 選項與引數:

# -i:若需要刪除時,會出現提示字元

# -i:命令名稱可忽略大小寫

# -e:表示後面接的【command name】要一致

檢視記憶體使用情況

free

[-b|-k|-m|-g|-h]

[-t]

[-s n -c n]

# 選項與引數:

# -b:直接輸入 free 時顯示的單位是 kbytes,可以使用其他單位

# -t:顯示物理記憶體與 swap 的總量

# -s:讓系統不斷重新整理顯示資料

# -c:與 -s 同時處理,列出幾次的意思

檢視系統與核心資訊

uname

[-asrmpi]

# 選項與引數:

# -s:系統核心名稱

# -r:系統核心版本

# -m:系統的硬體架構

# -p:cpu 的型別

# -i:硬體的平台

檢視系統啟動時間與任務負載

uptime

# 顯示目前系統以及執行的時間以及平均負載情況

追蹤網路或 socket 檔案

【netstat】命令常用於網路監控方面。

netstat -[atunlp]

# 選項與引數:

# -a:將目前系統所有的連線、監聽、socket 資訊都列出來

# -t:列出 tcp 網路封包資訊

# -u:列出 udp 網路封包資訊

# -n:以埠號來顯示

# -l:列出目前網路監聽的服務

# -p:列出網路服務的程序 pid

分析核心產生的資訊

命令【dmesg】可以將核心產生的資訊讀取出來,接合【grep】命令查詢需要的資訊。

作業系統 程序管理

程序 申請資源和排程資源的基本單位,乙個程序就是乙個程式的乙個執行過程。是乙個動態的概念,在不同的作業系統中,會有不同的程序出現。程式 靜態概念,是指令和資料的集合,可長期儲存。程序與程式對應關係 乙個程式可以對應乙個程序或者多個程序 乙個程序可以對應乙個程式,或者一段程式 程序由程式,資料集合,程...

作業系統 程序管理

1.程序描述 2.程序狀態 2.2 程序狀態變化模型 2.3 程序掛起模型 2.4 程序控制 3.執行緒 4.ipc 5.程序互斥與同步 乙個程式在乙個資料集合上的一次動態執行過程。程式 演算法 資料結構 與程式的區別 併發concurrency 一段時間內有多個程序執行 並行parallelism...

作業系統 程序管理

當多個作業並處於記憶體中時,同乙個作業中沒有前趨關係的程式段或者不同作業的程式段可以並行執行。程式併發執行的特徵 程式併發導致的不可再現性 由於程式的併發執行,失去了封閉性,其計算結果與併發程式推進的速度有關,從而失去了程式的可再現性,也就是說,程式經過多次執行後,雖然執行時的環境和初始條件相同,但...