概念
在 Linux 系統(tǒng)中,進程是正在運行的程序的實例。理解進程的管理、查看和控制對于系統(tǒng)管理員和開發(fā)者來說非常重要
進程的定義:
? 進程(Process)是程序在執(zhí)行時的一個實例。它包含了程序的代碼、數據、堆棧、環(huán)境變量等。
? 每個進程都有一個唯一的 進程 ID(PID),用于標識進程。
? 進程可以處于不同的狀態(tài),如運行態(tài)、就緒態(tài)、等待態(tài)、僵尸態(tài)等。
進程監(jiān)控指令之ps
ps命令用于報告當前系統(tǒng)的進程狀態(tài)。可以搭配kill指令隨時中斷、刪除不必要的程序。ps命令是最基本同時也是非常強大的進程查看命令,使用該命令可以確定有哪些進程正在運行和運行的狀態(tài)、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等,總之大部分信息都是可以通過執(zhí)行該命令得到的.
語法
| | | | --- | --- | | | ps[選項]|
常用選項說明
? -a:顯示所有用戶的進程(不包括會話領導者和沒有控制終端的進程)。
? -u:顯示進程的用戶信息。
? -x:顯示沒有控制終端的進程。
? -e:顯示所有進程。
? -f:顯示長格式信息,包括父進程 ID、控制終端等。
? -l:顯示長格式信息,類似于 -f,但更詳細。
? -o:自定義輸出格式,指定要顯示的字段。
? -p:指定要顯示的進程 ID。
? -t:指定要顯示的終端。
? -U:指定要顯示的用戶。
? -G:指定要顯示的用戶組。
常用搭配
| | | |---|---| | |ps-ef| | |ps-aux| | |ps-le|
ps -aux解析
| | | | --- | --- | | | root@master-01:~# ps -aux | head -10 | | | USER PID%CPU%MEM VSZ RSS TTY STAT START TIME COMMAND | | | root 10.40.017085611472? Ss Feb17350:48/sbin/init nopti | | | root 20.00.0 0 0? S Feb17 0:13[kthreadd] | | | root 30.00.0 0 0? I< ? Feb17 ??0:00?[rcu_gp] | | ? ? | root ? ? ? ? ??40.00.0? ? ??0? ? ?0?? ? ? ? ?I< ? Feb17 ??0:00?[rcu_par_gp] | | ? ? | root ? ? ? ? ??60.00.0? ? ??0? ? ?0?? ? ? ? ?I< ? Feb17 ??0:00?[kworker/0:0H-kblockd] | | ? ? | root ? ? ? ? ??80.00.0? ? ??0? ? ?0?? ? ? ? ?I< ? Feb17 ??0:00?[mm_percpu_wq] | | ? ? | root ? ? ? ? ??90.00.0? ? ??0? ? ?0?? ? ? ? ?S ? ?Feb17 ??2:29?[ksoftirqd/0] | | ? ? | root ? ? ? ? ?100.00.0? ? ??0? ? ?0?? ? ? ? ?I ? ?Feb17 ?53:47?[rcu_sched] | | ? ? | root ? ? ? ? ?110.00.0? ? ??0? ? ?0?? ? ? ? ?S ? ?Feb17 ??0:08 [migration/0] | | ? ? | ? ? | | ? ? |?#解析 | | ? ? | USER:表示用戶 | | ? ? | PID:表示進程號 | | ? ? |?%CPU:表示cpu占用率 | | ? ? |?%MEM:表示內存占用率 | | ? ? | VSZ:進程占用的虛擬內存,單位kb | | ? ? | RSS:進程占用的常駐內存,單位kb | | ? ? | TTY:?表示進程沒有控制終端 | | ? ? | STAT:進程狀態(tài) | | ? ? | START:進程啟動時間 | | ? ? | TIME:進程累計運行了多長時間 | | ? ? | COMMAND:進程運行的命令 |
進程狀態(tài)
常用進程基礎狀態(tài)
? 運行態(tài)(Running):狀態(tài)字符R。進程正在CPU上運行,或者在運行隊列中等待運行
? 睡眠態(tài)(Sleeping):狀態(tài)字符S。進程正在等待某些事件(如 I/O 操作、信號等)完成。進程處于睡眠態(tài)時,不會占用 CPU 時間。
? 不可中斷睡眠態(tài)(Disk Sleep):狀態(tài)字符D。進程正在等待某些不可中斷的 I/O 操作完成,通常與磁盤 I/O 操作有關。處于這種狀態(tài)的進程不能被信號喚醒,也不能被 kill 命令終止。
? 停止態(tài)(Stopped):狀態(tài)字符T。進程被信號停止,通常是因為收到了 SIGSTOP 或 SIGTSTP 信號。停止的進程不會占用 CPU 時間,但可以被信號喚醒。
? 僵尸進程(Zombie):狀態(tài)字符Z。進程已經完成,但其父進程尚未讀取其狀態(tài)信息。僵尸進程不能被終止,只能等待父進程讀取狀態(tài)信息后自動消失。僵尸進程會占用系統(tǒng)資源,直到父進程讀取其狀態(tài)信息。
? 死態(tài)(Dead):狀態(tài)字符X。進程已經死亡,但尚未被父進程回收。這種狀態(tài)的進程通常不會出現(xiàn)在 ps 的輸出中。
常用組合進程狀態(tài)
? R+、S+、D+:帶+號的進程,表示進程前臺運行
? Ss、xxxs:帶小s的進程,進程是父進程
? R<、S<:帶小于號<的進程,進程是高優(yōu)先級進程,優(yōu)先被cpu調度
? RN、SN:帶N的進程,進程是低優(yōu)先級進程
? Sl:帶l的線程,進程是多線程狀態(tài)
僵尸狀態(tài)的進程
這里著重講一下僵尸狀態(tài)的進程,僵尸狀態(tài)的進程因為一些原因脫離系統(tǒng)控制,但是進程又沒有正常退出(結束),進程運行中但是不受控制,占用系統(tǒng)的cpu、內存資源。
僵尸狀態(tài)排查及結束流程
1. 使用ps命令查找僵尸進程
| | | | --- | --- | | | ps -ef |grep'Z'| | |# 或者使用更詳細的命令來定位僵尸進程及其父進程,在輸出中,STAT 列為 Z 的進程即為僵尸進程 | | | ps -A -ostat,ppid,pid,cmd |grep-e'^[Zz]'|
2. 定位僵尸進程的父進程
| | | |---|---| | |# 下面命令輸出的是僵尸進程的父進程PID | | |ps-oppid=-p<僵尸進程PID> |
3. 終止父進程
| | | | --- | --- | | |# 父進程終止后,僵尸進程會被 init 進程(PID 1)接管并自動清理 | | |kill-9 父進程pid |
孤兒進程
對系統(tǒng)影響不大。
某個子進程的父進程因為特殊原因掛了,但是子進程還在,子進程就是孤兒進程。
進程監(jiān)控指令之top、htop、iotop
top
top命令可以動態(tài)的持續(xù)監(jiān)聽進程的運行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據需要,人性化的定制自己的輸出,進而更清楚的了解進程的運行狀態(tài)
語法
| | | | --- | --- | | |top[選項]|
常用選項說明
? -d:指定top命令每隔幾秒更新,默認是3秒
? -b:使用批處理模式,一般和-n選項結合使用,用于把top命令重定向到文件中
? -p:僅查看指定ID的進程
? -u:只監(jiān)聽某個用戶的進程
示例:
| | | |---|---| | |root@master-01:~#top| | |top-1755up60days,6:30,1user,load average:2.55,1.74,1.88| | |Tasks:473total, 1running,472sleeping, 0stopped, 0zombie| | |%Cpu(s):0.2us,0.4sy,0.0ni,99.4id,0.0wa,0.0hi,0.0si,0.0st| | |MiB Mem :64050.7total,29284.5free, 6963.5used,27802.7buff/cache| | |MiB Swap: 0.0total, 0.0free, 0.0used.55773.2availMem| | | | | |PIDUSER PRNI VIRT RES SHRS%CPU%MEM TIME+COMMAND| | |1280024root 20 0 9440 4136 3056R 6.2 0.0 0:00.01top| | |1root 20 017085611472 6800S 0.0 0.0350:51.46systemd| | |2root 20 0 0 0 0S 0.0 0.0 0:13.76kthreadd| | |3root 0-20 0 0 0I 0.0 0.0 0:00.00rcu_gp| | |4root 0-20 0 0 0I 0.0 0.0 0:00.01rcu_par_gp| | |6root 0-20 0 0 0I 0.0 0.0 0:00.00kworker/0:0H-kblockd| | |8root 0-20 0 0 0I 0.0 0.0 0:00.00mm_percpu_wq| | |9root 20 0 0 0 0S 0.0 0.0 2:29.50ksoftirqd/0| | |10root 20 0 0 0 0I 0.0 0.053:48.12rcu_sched|說明圖:

htop
htop 是一個交互式的進程查看器,類似于 top,但提供了更豐富的功能和更友好的用戶界面。它支持顏色顯示、樹狀結構、進程排序等功能,還可以直接在界面中操作進程(如殺死進程)。
安裝
| | | |---| --- | | |在大多數 Linux 發(fā)行版中,htop 可以通過包管理器安裝:| | | bash | | |復制 | | | # Ubuntu/Debian | | |sudo apt-getinstallhtop| | | | | |# CentOS/RHEL | | |sudo yuminstallhtop| | | | | |# Fedora | | |sudo dnfinstallhtop|運行htop后,你會看到類似以下的界面:

常用快捷鍵
? F1:幫助
? F2:設置
? F3:搜索進程
? F4:過濾進程
? F5:樹狀視圖
? F6:排序字段
? F9:殺死進程
? F10:退出
iotop
iotop是一個用于監(jiān)控磁盤 I/O 活動的工具,可以幫助你了解哪些進程正在占用磁盤 I/O 資源。它提供了實時的 I/O 使用情況,包括讀寫速度、進程信息等。
安裝
| | | |---| --- | | |# Ubuntu/Debian | | |sudo apt-getinstalliotop| | | | | |# CentOS/RHEL | | |sudo yuminstalliotop| | | | | |# Fedora | | |sudo dnfinstalliotop|運行iotop后,你會看到類似以下的界面:

鏈接:https://www.cnblogs.com/huangSir-devops/p/18834292
-
Linux
+關注
關注
88文章
11758瀏覽量
219008 -
程序
+關注
關注
117文章
3846瀏覽量
85229 -
命令
+關注
關注
5文章
755瀏覽量
23747 -
進程
+關注
關注
0文章
211瀏覽量
14532
原文標題:Linux進程管理完全指南:從ps到htop,掌握關鍵命令
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
Linux使用Systemd管理進程服務
Linux內核進程管理與調度:策略優(yōu)化與實踐分析
防火墻原理入門
數字信號處理入門指南
Linux教程之進程的概念和進程管理命令的使用
學會Linux進程管理的方法
Linux系統(tǒng)進程管理入門指南
評論