概念
在 Linux 系統(tǒng)中,進(jìn)程是正在運行的程序的實例。理解進(jìn)程的管理、查看和控制對于系統(tǒng)管理員和開發(fā)者來說非常重要
進(jìn)程的定義:
? 進(jìn)程(Process)是程序在執(zhí)行時的一個實例。它包含了程序的代碼、數(shù)據(jù)、堆棧、環(huán)境變量等。
? 每個進(jìn)程都有一個唯一的 進(jìn)程 ID(PID),用于標(biāo)識進(jìn)程。
? 進(jìn)程可以處于不同的狀態(tài),如運行態(tài)、就緒態(tài)、等待態(tài)、僵尸態(tài)等。
進(jìn)程監(jiān)控指令之ps
ps命令用于報告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)。可以搭配kill指令隨時中斷、刪除不必要的程序。ps命令是最基本同時也是非常強(qiáng)大的進(jìn)程查看命令,使用該命令可以確定有哪些進(jìn)程正在運行和運行的狀態(tài)、進(jìn)程是否結(jié)束、進(jìn)程有沒有僵死、哪些進(jìn)程占用了過多的資源等等,總之大部分信息都是可以通過執(zhí)行該命令得到的.
語法
| | | | --- | --- | | | ps[選項]|
常用選項說明
? -a:顯示所有用戶的進(jìn)程(不包括會話領(lǐng)導(dǎo)者和沒有控制終端的進(jìn)程)。
? -u:顯示進(jìn)程的用戶信息。
? -x:顯示沒有控制終端的進(jìn)程。
? -e:顯示所有進(jìn)程。
? -f:顯示長格式信息,包括父進(jìn)程 ID、控制終端等。
? -l:顯示長格式信息,類似于 -f,但更詳細(xì)。
? -o:自定義輸出格式,指定要顯示的字段。
? -p:指定要顯示的進(jìn)程 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:表示進(jìn)程號 | | ? ? |?%CPU:表示cpu占用率 | | ? ? |?%MEM:表示內(nèi)存占用率 | | ? ? | VSZ:進(jìn)程占用的虛擬內(nèi)存,單位kb | | ? ? | RSS:進(jìn)程占用的常駐內(nèi)存,單位kb | | ? ? | TTY:?表示進(jìn)程沒有控制終端 | | ? ? | STAT:進(jìn)程狀態(tài) | | ? ? | START:進(jìn)程啟動時間 | | ? ? | TIME:進(jìn)程累計運行了多長時間 | | ? ? | COMMAND:進(jìn)程運行的命令 |
進(jìn)程狀態(tài)
常用進(jìn)程基礎(chǔ)狀態(tài)
? 運行態(tài)(Running):狀態(tài)字符R。進(jìn)程正在CPU上運行,或者在運行隊列中等待運行
? 睡眠態(tài)(Sleeping):狀態(tài)字符S。進(jìn)程正在等待某些事件(如 I/O 操作、信號等)完成。進(jìn)程處于睡眠態(tài)時,不會占用 CPU 時間。
? 不可中斷睡眠態(tài)(Disk Sleep):狀態(tài)字符D。進(jìn)程正在等待某些不可中斷的 I/O 操作完成,通常與磁盤 I/O 操作有關(guān)。處于這種狀態(tài)的進(jìn)程不能被信號喚醒,也不能被 kill 命令終止。
? 停止態(tài)(Stopped):狀態(tài)字符T。進(jìn)程被信號停止,通常是因為收到了 SIGSTOP 或 SIGTSTP 信號。停止的進(jìn)程不會占用 CPU 時間,但可以被信號喚醒。
? 僵尸進(jìn)程(Zombie):狀態(tài)字符Z。進(jìn)程已經(jīng)完成,但其父進(jìn)程尚未讀取其狀態(tài)信息。僵尸進(jìn)程不能被終止,只能等待父進(jìn)程讀取狀態(tài)信息后自動消失。僵尸進(jìn)程會占用系統(tǒng)資源,直到父進(jìn)程讀取其狀態(tài)信息。
? 死態(tài)(Dead):狀態(tài)字符X。進(jìn)程已經(jīng)死亡,但尚未被父進(jìn)程回收。這種狀態(tài)的進(jìn)程通常不會出現(xiàn)在 ps 的輸出中。
常用組合進(jìn)程狀態(tài)
? R+、S+、D+:帶+號的進(jìn)程,表示進(jìn)程前臺運行
? Ss、xxxs:帶小s的進(jìn)程,進(jìn)程是父進(jìn)程
? R<、S<:帶小于號<的進(jìn)程,進(jìn)程是高優(yōu)先級進(jìn)程,優(yōu)先被cpu調(diào)度
? RN、SN:帶N的進(jìn)程,進(jìn)程是低優(yōu)先級進(jìn)程
? Sl:帶l的線程,進(jìn)程是多線程狀態(tài)
僵尸狀態(tài)的進(jìn)程
這里著重講一下僵尸狀態(tài)的進(jìn)程,僵尸狀態(tài)的進(jìn)程因為一些原因脫離系統(tǒng)控制,但是進(jìn)程又沒有正常退出(結(jié)束),進(jìn)程運行中但是不受控制,占用系統(tǒng)的cpu、內(nèi)存資源。
僵尸狀態(tài)排查及結(jié)束流程
1. 使用ps命令查找僵尸進(jìn)程
| | | | --- | --- | | | ps -ef |grep'Z'| | |# 或者使用更詳細(xì)的命令來定位僵尸進(jìn)程及其父進(jìn)程,在輸出中,STAT 列為 Z 的進(jìn)程即為僵尸進(jìn)程 | | | ps -A -ostat,ppid,pid,cmd |grep-e'^[Zz]'|
2. 定位僵尸進(jìn)程的父進(jìn)程
| | | |---|---| | |# 下面命令輸出的是僵尸進(jìn)程的父進(jìn)程PID | | |ps-oppid=-p<僵尸進(jìn)程PID> |
3. 終止父進(jìn)程
| | | | --- | --- | | |# 父進(jìn)程終止后,僵尸進(jìn)程會被 init 進(jìn)程(PID 1)接管并自動清理 | | |kill-9 父進(jìn)程pid |
孤兒進(jìn)程
對系統(tǒng)影響不大。
某個子進(jìn)程的父進(jìn)程因為特殊原因掛了,但是子進(jìn)程還在,子進(jìn)程就是孤兒進(jìn)程。
進(jìn)程監(jiān)控指令之top、htop、iotop
top
top命令可以動態(tài)的持續(xù)監(jiān)聽進(jìn)程的運行狀態(tài),與此同時,該命令還提供了一個交互界面,用戶可以根據(jù)需要,人性化的定制自己的輸出,進(jìn)而更清楚的了解進(jìn)程的運行狀態(tài)
語法
| | | | --- | --- | | |top[選項]|
常用選項說明
? -d:指定top命令每隔幾秒更新,默認(rèn)是3秒
? -b:使用批處理模式,一般和-n選項結(jié)合使用,用于把top命令重定向到文件中
? -p:僅查看指定ID的進(jìn)程
? -u:只監(jiān)聽某個用戶的進(jì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 是一個交互式的進(jìn)程查看器,類似于 top,但提供了更豐富的功能和更友好的用戶界面。它支持顏色顯示、樹狀結(jié)構(gòu)、進(jìn)程排序等功能,還可以直接在界面中操作進(jìn)程(如殺死進(jìn)程)。
安裝
| | | |---| --- | | |在大多數(shù) Linux 發(fā)行版中,htop 可以通過包管理器安裝:| | | bash | | |復(fù)制 | | | # Ubuntu/Debian | | |sudo apt-getinstallhtop| | | | | |# CentOS/RHEL | | |sudo yuminstallhtop| | | | | |# Fedora | | |sudo dnfinstallhtop|運行htop后,你會看到類似以下的界面:
常用快捷鍵
? F1:幫助
? F2:設(shè)置
? F3:搜索進(jìn)程
? F4:過濾進(jìn)程
? F5:樹狀視圖
? F6:排序字段
? F9:殺死進(jìn)程
? F10:退出
iotop
iotop是一個用于監(jiān)控磁盤 I/O 活動的工具,可以幫助你了解哪些進(jìn)程正在占用磁盤 I/O 資源。它提供了實時的 I/O 使用情況,包括讀寫速度、進(jìn)程信息等。
安裝
| | | |---| --- | | |# Ubuntu/Debian | | |sudo apt-getinstalliotop| | | | | |# CentOS/RHEL | | |sudo yuminstalliotop| | | | | |# Fedora | | |sudo dnfinstalliotop|運行iotop后,你會看到類似以下的界面:
鏈接:https://www.cnblogs.com/huangSir-devops/p/18834292
-
Linux
+關(guān)注
關(guān)注
87文章
11457瀏覽量
212772 -
程序
+關(guān)注
關(guān)注
117文章
3820瀏覽量
82396 -
命令
+關(guān)注
關(guān)注
5文章
726瀏覽量
22671 -
進(jìn)程
+關(guān)注
關(guān)注
0文章
206瀏覽量
14212
原文標(biāo)題:Linux進(jìn)程管理完全指南:從ps到htop,掌握關(guān)鍵命令
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Linux使用Systemd管理進(jìn)程服務(wù)
Linux內(nèi)核進(jìn)程管理與調(diào)度:策略優(yōu)化與實踐分析

Linux進(jìn)程管理
防火墻原理入門

數(shù)字信號處理入門指南

基于Linux進(jìn)程管理的詳細(xì)剖析

Linux教程之進(jìn)程的概念和進(jìn)程管理命令的使用

Linux進(jìn)程管理:什么是進(jìn)程?進(jìn)程的生命周期

學(xué)會Linux進(jìn)程管理的方法

評論