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
停止