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

1-10-RHEL7-Linux系統(tǒng)進(jìn)程管理和線(xiàn)程的區(qū)別分析
Linux進(jìn)程管理
防火墻原理入門(mén)

數(shù)字信號(hào)處理入門(mén)指南

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

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

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

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

評(píng)論