Linux 系統管理-進程相關操作
ps(查看各進程情況)
ps (Process Status) 是用來查看系統當前運行的進程,可以查看當前進程的狀態以及進程號等資訊,通常會先使用ps找出特定的進程,配合kill指令來終止進程。
進程的狀態
| 狀態 | 定義 |
|---|---|
| R | 運行中 (Running) |
| S | 睡眠,等待調用 (Interruptible Sleep) |
| D | 等待硬碟I/O (Uninterruptible Sleep) |
| T | 暫停狀態 (Stoped) |
| Z | 僵屍進程 (Zombie) |
| N | 低優先級進程 |
| < | 高優先級進程 |
| s | 進程的領導者 |
| I | 多線程狀態 |
| + | 前台進程 |
指令風格( -參數、--參數、參數 )
常會看到指令有時出現 -,有時 -- ,有時前面又沒有-,分別代表不同風格的指令
- UNIX:
-參數,如ps -ef - BSD:參數前沒有符號,如
ps aux - GNU:
--參數,如ps axu --sort -%cpu
常用參數
a:顯示當前終端運行的進程u:顯示用戶相關進程與用戶相關屬性,格式會從
UID PID PPIC C STIME TTY TIME CMD轉變成USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND的格式x:顯示沒有控制終端的進程j:顯示與作業有關的信息(顯示的列):會話期ID(SID),進程組ID(PGID),控制終端(TT),終端進程組ID(TRGID)f:樹狀結構,表達程序間的相互關係-e:顯示所有的進程-f:列出進程的完整資訊(最詳盡)-u:列出指定用戶運行的進程--sort +-列名:依照哪個列的數值排序,+為升序(小 ~ 大) ;-為降序(大 ~ 小)
ps -f列出的詳細資訊
以下是 ps -f 命令列出的進程資訊的詳細說明:
| 名稱 | 定義 |
|---|---|
| PID | 進程 ID,是系統用來識別進程的唯一編號 |
| USER | 進程所屬的使用者 |
| STAT | 進程的狀態 |
| TTY | 進程連接的終端,若與終端無關顯示 ? |
| TIME | 進程使用 CPU 的時間 |
| START | 進程啟動的時間 |
| %CPU | 進程使用的 CPU 使用率 |
| %MEM | 進程使用的記憶體使用率 |
| VSZ | 進程使用的虛擬記憶體(內存)大小 |
| RSS | 進程使用的實際記憶體(內存)大小 |
| COMMAND | 進程的命令行 |
範例
不加任何參數查看當前使用的終端會話(你當前使用的帳號)正在使用的進程
1
ps顯示所有進程的完整資訊 (最常用)
1
ps -ef想要查看CPU、記憶體等資訊時 (u 跟 j 只能選一個用)
1
ps aux查看與job 作業有關的列資訊,也可以用來查看守護進程 (u 跟 j 只能選一個用)
1
ps axj查詢當前nginx 相關的進程,通常可以用在當nginx 占用進程號,需要將他停止時
1
ps -ef | grep nginx後續使用grep 又想保留標題行
1
2
3
4ps -ef | grep -E "^USER|nginx"
# 看你選擇要顯示的列擇一
ps -ef | grep -E "^UID|nginx"查看root用戶運行的進程
1
ps -f -u root依照cpu 使用率排序 大 ~ 小
1
ps aux --sort -%cpu
kill(中止進程)
- 用來終止特定進程的運行,通過向進程發起信號,來結束相對應的進程
- 需要有足夠的權限,才能夠停止其他用戶的進程
- 若不加任何參數,預設為
-15,使用信號15,進程會正常退出
常用參數
- -l:列出所有的信號名稱
- -u:終止指定用戶的進程
常用信號
1 | |
查看所有的信號名稱
1 | |
強制退出進程
1 | |
終止指定用戶的進程
1 | |
nice(設定進程的優先級)
設定進程的優先級,設定數值為-20~19,數字越少,進程優先級越高
1 | |
這會將
sleep 500設置為較高的優先級(-10),使其在系統資源分配中更有可能獲得更多的CPU時間。nice 命令通常需要超級用戶權限(root)才能將進程優先級降低。普通用戶只能將其提高到0
切換進程的指令
ctrl+z 、 ctrl+c
ctrl+c:強制中斷進程,只能中斷前台運行的程序,如果要中斷後台運行的程序要用到kill指令ctrl+z:暫時停止進程 (掛起)
jobs(要查看當前終端會話中的所有作業及其對應的作業號)
要查看當前終端會話中的所有作業及其對應的作業號,可以使用 jobs 命令。這將列出所有正在運行的作業及其狀態。
輸出類似如下
1 | |
bg(將進程抓到後台去執行)
將進程抓到後台去執行
將上一個掛起的進程,拿到後台執行
1
bg將指定作業號的進程,拿到後台執行
1
bg 作業號
運行完會看到類似輸出
1 | |
fg(將進程抓到前台終端去執行)
將進程抓到前台終端去執行
將上一個掛起的進程,拿到前台執行
1
fg將指定作業號的進程,拿到前台執行
1
fg %作業號
nohup(讓一個命令在後台運行,且不受終端關閉影響)
讓一個命令在後台運行,且不受終端關閉影響
雖然 nohup 可以讓一個進程在後台持續運行,但它並不會自動將該進程轉化為典型的守護進程。它仍然與終端會話相關聯,只是在終端關閉後也繼續運行。
運行時預設會創建一個nohup.out文件紀錄指令運行的過程
1 | |
輸出到指定文件
1
nohup sleep 500 > custom.out &將標準錯誤輸出到指定文件
1
nohup sleep 500 > custom.out 2>&1 &2>&1,2 為標準錯誤,1為標準輸出,也就是將標準錯誤的輸出,覆蓋掉原本標準輸出的位置custom.out忽略標準輸出 跟 標準錯誤 的訊息
1
nohup sleep 500 > /dev/null 2>&1 &/dev/null,是一個特殊設備文件,他將一切寫入他的輸入給丟棄2>&1, 把標準錯誤輸出也一起丟到標準輸入中,也就是把標準錯誤也一起丟到/dev/null
範例介紹-使用sleep 指令練習 進程切換
先在前台運行sleep 指令
sleep 500,這個指令會占用終端指定秒數(500)後,再將終端返回給用戶,適合拿來練習操作掛起、後台執行等操作將它掛起
ctrl+Z此時
sleep 500這個進程暫時停止了使用
jobs指令查看當前的任務有哪些,可以看到1
2
3
4# 以下資訊分別為
# 作業號 , 進程狀態 , 運行的程式名稱
[1]+ Stopped sleep 500或是想要使用
ps -ef | grep sleep檢查進程是否還在若想讓
sleep 500在後台執行,輸入bg 作業號,也就是bg 1,或是使用bg重新讓上一次掛起的進程再度開始在後台執行,運行完會出現類似 作業號, PID 的輸出1
2# 作業號 PID
[1] 4237如果一開始執行就想要讓他在後台執行可以使用
指令 &,也就是sleep 500 &若想將
sleep 500回到前台執行 使用fg %作業號,也就是fg %1最後不想執行了,使用
ctrl+c停止