跳轉到內容

Ict-innovation/LPI/103.5

來自華夏公益教科書

103.5 建立、監控和終止程序

[編輯 | 編輯原始碼]

考生應能夠執行基本的程序管理。


關鍵知識領域

  • 在前景和後臺執行作業。
  • 向程式傳送訊號,使其在登出後繼續執行。
  • 監控活動程序。
  • 選擇和排序要顯示的程序。
  • 向程序傳送訊號。

當 shell 執行命令時,它通常會等待,並且在該命令完成之前不會提示進一步的輸入。據說該命令在前景中執行。

當程式在前景中執行時,可以恢復 shell 提示符,但只能透過暫時中斷程式。中斷訊號是 Ctrl Z。

啟動和停止作業

[編輯 | 編輯原始碼]

從 shell 啟動的程序也稱為作業。作業收到^Z訊號後,它將被停止,並且 shell 提示符將被恢復。要將程式在後臺重新啟動,只需鍵入:bg

示例

$ xclock

xclock 在前景中執行,shell 提示符丟失

[1]+ Stopped xclock xclock 收到 ^Z 訊號

$ bg shell 提示符恢復,發出 bg 命令

[1]+ xclock & xclock 在後臺執行

請注意上面的 [1]+ 符號。整數是程序的作業號,可以將其作為引用。

'+' 符號表示最後修改的程序。'-' 符號表示倒數第二個修改的程序。可以透過在命令末尾新增&將程序在後臺啟動。

$ xclock&

[1] 6213

這裡報告的數字是作業號(方括號內)和程序 ID。


列出作業

jobs 實用程式列出從當前 shell 啟動的所有正在執行的程序。將列出作業號、作業的狀態(正在執行/已停止)以及最後修改的兩個程序。

jobs 的輸出
[1]- Stopped xclock

[2] Running xman &

[3]+ Stopped xload


作業號

可以使用作業號方便地停止和啟動一組作業。這是透過fg命令實現的。

將作業 2 呼叫到前臺並殺死作業 1
fg 2 or

fg %2 or

fg %?xma
! kill –9 %1


使用 nohup 避免 HUP

有一個名為nohup的程式,它充當與使用者會話無關的父程序。當用戶登出時,系統會向該程序組擁有的所有程序傳送 HUP 訊號。例如,要避免此 HUP 訊號,應像這樣啟動名為bigbang的指令碼,該指令碼嘗試計算宇宙的年齡

$ nohup bigbang &


檢視正在執行的程序

[編輯 | 編輯原始碼]

程序具有唯一的程序 ID,即 PID。此數字可用於修改程序的優先順序或停止它。程序是任何正在執行的可執行檔案。如果 process_2 由 process_1 生成,則稱為程序。生成 process_1 的過程稱為程序。

pstree 命令很好地說明了程序和程序層次結構。

圖 103.5.1:pstree 輸出的一部分
bash(1046)---xinit(1085)-+-X(1086) `-xfwm(1094)-+-xfce(1100)---xterm(1111)---bash(1113)-+-pstree(1180) -soffice.bin(1139)---soffice.bin(1152)-+

-soffice.bin(1153)

|-soffice.bin(1154) |-soffice.bin(1155) |-soffice.bin(1156) `-soffice.bin(1157) `-xclock(1138)
`-xscreensaver(1098)

在上圖中,顯示了所有程序的 PID;這些 PID 顯然是遞增的。最常用的選項是-p以顯示 PID,以及-h以僅突出顯示使用者的程序。

確定哪些程序正在執行的更直接方法是使用 ps。大多數使用者學習了適合大多數情況的選項組合。

以下列出了三個這樣的選項

ps ux 使用者執行的所有程序

ps T使用者在當前終端下執行的程序

ps aux系統上的所有程序

建議您閱讀ps 手冊頁並選擇最適合您的選項!

ps 適應 UNIX 樣式和 BSD 樣式引數
用法:ps -[Unix98 選項]

ps [BSD 樣式選項]

ps --[GNU 樣式長選項]

ps --help 以獲取命令摘要


選項摘要
-a 顯示當前使用者連結到 tty 的所有程序(除了會話領導者)

-e-A 顯示所有程序

-f 給出 PPID(父程序 ID)和 STIME(開始時間)

-l 類似於-f 並顯示長列表

a 顯示連結到 tty 的所有程序,包括其他使用者

x 也顯示沒有控制 tty 的所有程序

向程序傳送訊號

[編輯 | 編輯原始碼]

kill 命令可用於向程序傳送訊號。共有 63 個訊號可用。預設訊號終止程序,稱為 SIGTERM,值為 15。

kill

語法

kill SIGNAL process_PID

除非您是 root 使用者,否則您只能向自己擁有的程序傳送訊號。

除了由核心處理的 SIGKILL 外,每個程序都可以選擇是否捕獲訊號。大多數守護程序使用 SIGHUP 表示“重新讀取配置檔案”。

最常見的訊號
1 或 SIGHUP 結束通話或斷開程序連線

2 或 SIGINT 與 Ctrl+C 中斷相同

3 或 SIGQUIT 退出

9 或 SIGKILL 透過核心呼叫殺死程序

15 或 SIGTERM '正常' 終止程序。這是 DEFAULT 訊號。

也可以在不知道程序 PID 的情況下使用killall停止程序。

killall

語法

killall SIGNAL process_NAME



使用過的檔案、術語和實用程式:* &

  • bg
  • fg
  • jobs
  • kill
  • nohup
  • ps
  • top
  • free
  • uptime
  • killall


上一章 | 下一章

華夏公益教科書