【鳥哥 Linux 16】進程管理與SELinux初探
【鳥哥 Linux 16】進程管理與SELinux初探
一、相關概念梳理
-
程序:一些代碼段的靜態集合
-
進程:程序中靜態代碼段的一次動態執行
-
子進程:在某一個進程中創建的新作業,從該進程衍生出來的進程稱為子進程
-
父進程:在bash下執行touch,bash就是父進程,touch就會產生子進程
二、進程調用的流程:fork & exec
- 父進程fork產生一個完全一樣的子進程(PID不同,具有PPID),然后通過exec執行程序。
三、工作管理(job control)
-
bash只能管理屬于自己的子進程的工作。(比如:無法使用工作管理來讓不同tty中的bash相互管理。)
-
為什么vim不能在后臺運行(run status)呢?因為放入后臺的工作絕對不能涉及用戶交互。
-
進行工作管理的條件和特點是:
1. 必須是當前shell的子進程
2. 必須是可以自動運行的工作
3. 放入后臺的工作不能涉及到等待輸入
4. 放入后臺的工作不能用^c終止,但可以用bg查看,使用fg切回。
工作狀態
-
前臺(foreground)狀態
-
后臺(background)狀態中的暫停(stopped)狀態,比如vim后臺之后就是這個狀態
-
后臺狀態中的運行(running)狀態。
*具體的工作管理方式
-
通過&
-
^z的方式將前臺工作放入后臺暫停,默認都會變成暫停(stopped)狀態
-
jobs指令展示后臺狀態
# 列出后臺進程的同時列出PID
jobs -l
# 僅列出run狀態的后臺進程
jobs -r
# 僅列出stopped狀態的后臺進程
jobs -s
- 下面的輸出中,+號代表上一個被放入后臺的程序,-號代表倒數第二個被放入后臺的程序。
# 以下是截取的jobs輸出
[1]+ Stopped vim test1.txt
[2] Stopped vim test2.txt
[3]- Stopped vim test.txt
fg將后臺工作拉到前臺
# 將+號進程拉到前臺
fg
# 將+號進程拉到前臺
fg +
# 將-號進程拉到前臺
fg -
# 將3號進程拉到前臺
fg %3
bg將程序放入后臺運行,和^z的區別是,放入后臺的狀態是run而不是stopped。
# 將+號進程放入后臺運行
bg
# 將+號進程放入后臺運行
bg +
# 將-號進程放入后臺運行
bg -
# 將3號進程放入后臺運行
bg %3
kill給進程發送多種終止信號
# 列出所有可用信號
kill -l
# 重新加載PID為13482的服務進程的配置文件(涉及到十七章系統服務)
kill -1 13482
# 向PID為13482的進程發送SIGTERM信號(kill -15),正常結束進程
kill 13482
# 對工作管理中的2號進程執行一次^c
kill -2 %2
# 對PID為13482的進程發送SIGKILL信號,忽略信號處理函數(用于強制刪除不正常的工作)
kill -9 13482
*脫機管理的問題(nohup)
-
上文敘述的后臺管理僅用于避免^c殺死進程的問題。試想如下情景:
-
當你遠程SSH到一臺服務器使用工作管理將某個程序放入后臺運行,然后你斷開了SSH,放入后臺運行的這個程序依然會結束。原因是某個Bash只能利用工作管理來管理屬于自己的子進程。你SSH登錄的時候分配了一個bash進程,這是你在這次工作中開啟的所有子進程的父進程,一旦你斷開SSH,父進程沒有了,子進程當然也會結束。
-
解決方法:使用at或者nohup,將這些進程放入系統后臺,與你的SSH終端機進程脫離關聯。
四、進程管理
進程觀察
ps:擷取某個時間點的進程情況(靜態查閱)
- ps的man page融合了多個發行版,閱讀困難,所以最好是記住幾個常用的。
# 摘取自ps的man page
This version of ps accepts several kinds of options:
1 UNIX options, which may be grouped and must be preceded by a dash.
2 BSD options, which may be grouped and must not be used with a dash.
3 GNU long options, which are preceded by two dashes.
- 查閱當前bash的進程
ps -l
- 查閱整個系統的進程
ps aux
# 以下是man page中對于該語句的說明
Note that "ps -aux" is distinct from "ps aux". The POSIX and UNIX standards require that "ps -aux" print all processes owned by a user
named "x", as well as printing all processes that would be selected by the -a option. If the user named "x" does not exist, this ps
may interpret the command as "ps aux" instead and print a warning. This behavior is intended to aid in transitioning old scripts and
habits. It is fragile, subject to change, and thus should not be relied upon.

浙公網安備 33010602011771號