Ict-innovation/LPI/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 啟動的所有正在執行的程序。將列出作業號、作業的狀態(正在執行/已停止)以及最後修改的兩個程序。
| [1]- Stopped xclock [2] Running xman & [3]+ Stopped xload |
作業號
可以使用作業號方便地停止和啟動一組作業。這是透過fg命令實現的。
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 命令很好地說明了父程序和子程序層次結構。
| 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 -[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