linux基础篇-系统中进程相关概念
進(jìn)程概念
? 內(nèi)核的功用:進(jìn)程管理、文件系統(tǒng)、網(wǎng)絡(luò)功能、內(nèi)存管理、驅(qū)動(dòng)程序、安全功能等
? Process: 運(yùn)行中的程序的一個(gè)副本,是被載入內(nèi)存的一個(gè)指令集合進(jìn)程ID(Process ID,PID)號(hào)碼被用來(lái)標(biāo)記各個(gè)進(jìn)程
UID、GID、和SELinux語(yǔ)境決定對(duì)文件系統(tǒng)的存取和訪問權(quán)限通常從執(zhí)行進(jìn)程的用戶來(lái)繼承存在生命周期
? task struct:Linux內(nèi)核存儲(chǔ)進(jìn)程信息的數(shù)據(jù)結(jié)構(gòu)格式
? task list:多個(gè)任務(wù)的的task struct組成的鏈表
? 進(jìn)程創(chuàng)建:
init:第一個(gè)進(jìn)程
進(jìn)程:都由其父進(jìn)程創(chuàng)建,父子關(guān)系,CoW(寫時(shí)復(fù)制copy on write)? ,fork(), clone()
進(jìn)程的基本狀態(tài)和轉(zhuǎn)換
進(jìn)程的基本狀態(tài)
??創(chuàng)建狀態(tài):進(jìn)程在創(chuàng)建時(shí)需要申請(qǐng)一個(gè)空白PCB(process control block進(jìn)程控制塊),向其中填寫控制和管理進(jìn)程的信息,完? ?成資源分配。如果創(chuàng)建工作無(wú)法完成,比如資源無(wú)法滿足,就無(wú)法被調(diào)度運(yùn)行,把此時(shí)進(jìn)程所處狀態(tài)稱為創(chuàng)建狀態(tài)
??就緒狀態(tài):進(jìn)程已準(zhǔn)備好,已分配到所需資源,只要分配到CPU就能夠立即運(yùn)行
??執(zhí)行狀態(tài):進(jìn)程處于就緒狀態(tài)被調(diào)度后,進(jìn)程進(jìn)入執(zhí)行狀態(tài)
??阻塞狀態(tài):正在執(zhí)行的進(jìn)程由于某些事件(I/O請(qǐng)求,申請(qǐng)緩存區(qū)失敗)而暫時(shí)無(wú)法運(yùn)行,進(jìn)程受到阻塞。在滿足請(qǐng)求時(shí)進(jìn)入? ?就緒狀態(tài)等待系統(tǒng)調(diào)用
??終止?fàn)顟B(tài):進(jìn)程結(jié)束,或出現(xiàn)錯(cuò)誤,或被系統(tǒng)終止,進(jìn)入終止?fàn)顟B(tài)。無(wú)法再執(zhí)行狀態(tài)之間轉(zhuǎn)換六種情況
??運(yùn)行——>就緒:1,主要是進(jìn)程占用CPU的時(shí)間過長(zhǎng),而系統(tǒng)分配給該進(jìn)程占用CPU的時(shí)間是有限的;2,在采用搶先式優(yōu)先級(jí)調(diào)度算法的系統(tǒng)中,當(dāng)有更高優(yōu)先級(jí)的進(jìn)程要運(yùn)行時(shí),該進(jìn)程就被迫讓出CPU,該進(jìn)程便由執(zhí)行狀態(tài)轉(zhuǎn)變?yōu)榫途w狀態(tài)
??就緒——>運(yùn)行:運(yùn)行的進(jìn)程的時(shí)間片用完,調(diào)度就轉(zhuǎn)到就緒隊(duì)列中選擇合適的進(jìn)程分配CPU
??運(yùn)行——>阻塞:正在執(zhí)行的進(jìn)程因發(fā)生某等待事件而無(wú)法執(zhí)行,則進(jìn)程由執(zhí)行狀態(tài)變?yōu)樽枞麪顟B(tài),如發(fā)生了I/O請(qǐng)求
??阻塞——>就緒:進(jìn)程所等待的事件已經(jīng)發(fā)生,就進(jìn)入就緒隊(duì)列
??以下兩種狀態(tài)是不可能發(fā)生的:
??阻塞——>運(yùn)行:即使給阻塞進(jìn)程分配CPU,也無(wú)法執(zhí)行,操作系統(tǒng)在進(jìn)行調(diào)度時(shí)不會(huì)從阻塞隊(duì)列進(jìn)行挑選,而是從就緒隊(duì)列中選取
??就緒——>阻塞:就緒態(tài)根本就沒有執(zhí)行,談不上進(jìn)入阻塞態(tài)
進(jìn)程優(yōu)先級(jí)
?進(jìn)程優(yōu)先級(jí):
系統(tǒng)優(yōu)先級(jí):數(shù)字越小,優(yōu)先級(jí)越高0-139(CentOS4,5)
各有140個(gè)運(yùn)行隊(duì)列和過期隊(duì)列
0-98,99(CentOS6)
實(shí)時(shí)優(yōu)先級(jí): 99-0 值最大優(yōu)先級(jí)最高
nice值:-20到19,對(duì)應(yīng)系統(tǒng)優(yōu)先級(jí)100-139或99
?Big O:時(shí)間復(fù)雜度,用時(shí)和規(guī)模的關(guān)系
O(1):恒定, O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
?
? 進(jìn)程內(nèi)存:
Page Frame: 頁(yè)框,用存儲(chǔ)頁(yè)面數(shù)據(jù),存儲(chǔ)Page 4k
LRU:Least Recently Used 近期最少使用算法,釋放內(nèi)存物理地址空間和線性地址空間
MMU:Memory Management Unit負(fù)責(zé)轉(zhuǎn)換線性和物理地址
TLB:Translation Lookaside Buffer翻譯后備緩沖器,用于保存虛擬地址和物理地址映射關(guān)系的緩存
? IPC: Inter Process Communication
同一主機(jī):signal:信號(hào)
shm: shared memory
semaphore:信號(hào)量,一種計(jì)數(shù)器
不同主機(jī):socket: IP和端口號(hào)
?RPC: remote procedure call
?MQ:消息隊(duì)列,Kafka,ActiveMQ
LRU算法
進(jìn)程狀態(tài)
? Linux內(nèi)核:搶占式多任務(wù)
? 進(jìn)程類型:
? 守護(hù)進(jìn)程: daemon,在系統(tǒng)引導(dǎo)過程中啟動(dòng)的進(jìn)程,和終端無(wú)關(guān)進(jìn)程
? 前臺(tái)進(jìn)程:跟終端相關(guān),通過終端啟動(dòng)的進(jìn)程
? 注意:兩者可相互轉(zhuǎn)化
? 進(jìn)程狀態(tài):
? 運(yùn)行態(tài):running
? 就緒態(tài):ready
? 睡眠態(tài):
? 可中斷:interruptable
? 不可中斷:uninterruptable
? 停止態(tài):stopped,暫停于內(nèi)存,但不會(huì)被調(diào)度,除非手動(dòng)啟動(dòng)
? 僵死態(tài):zombie,結(jié)束進(jìn)程,父進(jìn)程結(jié)束前,子進(jìn)程不關(guān)閉
系統(tǒng)管理工具
?進(jìn)程的分類:
CPU-Bound:CPU密集型,非交互
IO-Bound:IO密集型,交互
?Linux系統(tǒng)狀態(tài)的查看及管理工具:pstree, ps, pidof, pgrep, top, htop,
glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup
?pstree命令:
pstree - display a tree of processes
?ps: process state
ps - report a snapshot of the current processes
Linux系統(tǒng)各進(jìn)程的相關(guān)信息均保存在/proc/PID目錄下的各文件中,每個(gè)進(jìn)程都有一個(gè)PID號(hào)
ps:查看系統(tǒng)進(jìn)程
? ps [OPTION]...
? 支持三種選項(xiàng):
UNIX選項(xiàng)風(fēng)格 如-A -e??
BSD選項(xiàng)風(fēng)格? 如a
GNU選項(xiàng)風(fēng)格? 如--help
BSD風(fēng)格如下:
?? 選項(xiàng):默認(rèn)顯示當(dāng)前終端中的進(jìn)程
?? a 選項(xiàng)包括所有終端中的進(jìn)程
?? x 選項(xiàng)包括不鏈接終端的進(jìn)程
?? u 選項(xiàng)顯示進(jìn)程所有者的信息
?? f 選項(xiàng)顯示進(jìn)程樹,相當(dāng)于 --forest
?? k| --sort 屬性 對(duì)屬性 排序,屬性前加- 表示倒序
?? o 屬性… 選項(xiàng)顯示定制的信息 pid、cmd、%cpu、%mem
?? L 顯示支持的屬性列表
UNIX風(fēng)格如下:
??-C cmdlist 指定命令,多個(gè)命令用,分隔
??-L 顯示線程
??-e: 顯示所有進(jìn)程,相當(dāng)于-A
??-f: 顯示完整格式程序信息
??-F: 顯示更完整格式的進(jìn)程信息
??-H: 以進(jìn)程層級(jí)格式顯示進(jìn)程相關(guān)信息
??-u userlist 指定有效的用戶ID或名稱
??-U userlist 指定真正的用戶ID或名稱
??-g gid或groupname 指定有效的gid或組名稱
??-G gid或groupname 指定真正的gid或組名稱
??-p pid 顯示指pid的進(jìn)程
??--ppid pid 顯示屬于pid的子進(jìn)程
??-M 顯示SELinux信息,相當(dāng)于Z
例子:ps axO??pid,%CPU,cmd??k pid? 顯示相關(guān)信息并按pid排序
ps輸出屬性
? VSZ: Virtual memory SiZe,虛擬內(nèi)存集,線性內(nèi)存
? RSS: ReSident Size, 常駐內(nèi)存集
? STAT:進(jìn)程狀態(tài)
R:running
S: interruptable sleeping
D: uninterruptable sleeping
T: stopped
Z: zombie
+: 前臺(tái)進(jìn)程
l: 多線程進(jìn)程
L:內(nèi)存分頁(yè)并帶鎖
N:低優(yōu)先級(jí)進(jìn)程
<: 高優(yōu)先級(jí)進(jìn)程
s: session leader,會(huì)話(子進(jìn)程)發(fā)起者
ps
?ni: nice值
?pri: priority 優(yōu)先級(jí)
?psr: processor CPU編號(hào)
?rtprio: 實(shí)時(shí)優(yōu)先級(jí)
?示例:
ps axo pid,cmd,psr,ni,pri,rtprio
?常用組合:
aux
-ef
-eFH
-eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ps示例
?查詢你擁有的所有進(jìn)程:
ps -x
?顯示指定用戶名(RUID)或用戶ID的進(jìn)程:
ps -fU apache
ps -fu 48
?顯示指定用戶名(EUID)或用戶ID的進(jìn)程:
ps -fu wang
ps -fu 1000
?查看以root用戶權(quán)限(實(shí)際和有效ID)運(yùn)行的每個(gè)進(jìn)程:
ps -U root -u root
?列出某個(gè)組擁有的所有進(jìn)程(實(shí)際組ID:RGID或名稱):
ps -fG nginx
ps示例
?列出有效組名稱(或會(huì)話)所擁有的所有進(jìn)程:
ps -fg mysql
ps -fG 27
?通過進(jìn)程ID來(lái)顯示所屬的進(jìn)程:
ps -fp 1234
?以父進(jìn)程ID來(lái)顯示其下所有的進(jìn)程,如顯示父進(jìn)程為1154的所有進(jìn)程:ps -f --ppid 1234
?顯示指定PID的多個(gè)進(jìn)程:ps -fp 1204,1239,1263
?要按tty顯示所屬進(jìn)程:ps -ft pst/0
?以進(jìn)程樹顯示系統(tǒng)中的進(jìn)程如何相互鏈接:ps -e --forest
?以進(jìn)程樹顯示指定的進(jìn)程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd
?要顯示一個(gè)進(jìn)程的所有線程,將顯示LWP(輕量級(jí)進(jìn)程)以及NLWP(輕量級(jí)進(jìn)程數(shù))列:ps -fL -C nginx
?要列出所有格式說(shuō)明符:ps L
?查看進(jìn)程的PID,PPID,用戶名和命令:ps -eo pid,ppid,user,cmd
?自定義格式顯示文件系統(tǒng)組,ni值開始時(shí)間和進(jìn)程的時(shí)間:ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime
?使用其PID查找進(jìn)程名稱:ps -p 1244 -o comm=
?要以其名稱選擇特定進(jìn)程,顯示其所有子進(jìn)程:ps -C sshd,bash
?查找指定進(jìn)程名所有的所屬PID,在編寫需要從std輸出或文件讀取PID的腳本時(shí)這個(gè)參數(shù)很有用:ps -C httpd,sshd -o pid=
?檢查一個(gè)進(jìn)程的執(zhí)行時(shí)間:ps -eo comm,etime,user | grep nginx
?查找占用最多內(nèi)存和CPU的進(jìn)程:
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
?顯示安全信息:
ps -eM
ps --context
?使用以下命令以用戶定義的格式顯示安全信息。
ps -eo euser,ruser,suser,fuser,f,comm,label
?使用watch實(shí)用程序執(zhí)行重復(fù)的輸出以實(shí)現(xiàn)對(duì)就程進(jìn)行實(shí)時(shí)的監(jiān)視,如下面的命令顯示每秒鐘的監(jiān)視:
watch -n 1 'ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head'
進(jìn)程優(yōu)先級(jí)
?進(jìn)程優(yōu)先級(jí)調(diào)整:
靜態(tài)優(yōu)先級(jí):100-139
進(jìn)程默認(rèn)啟動(dòng)時(shí)的nice值為0,優(yōu)先級(jí)為120
只有根用戶才能降低nice值(提高優(yōu)先性)
?nice命令:
nice [OPTION] [COMMAND [ARG]...]
?renice命令:
renice [-n] priority pid...
?查看:
ps axo pid,comm,ni
搜索進(jìn)程
??最靈活:ps 選項(xiàng) | 其它命令
??按預(yù)定義的模式:pgrep
? pgrep [options] pattern
? -u uid: effective user,生效者
? -U uid: real user,真正發(fā)起運(yùn)行命令者
? -t terminal: 與指定終端相關(guān)的進(jìn)程
? -l: 顯示進(jìn)程名
? -a: 顯示完整格式的進(jìn)程名
? -P pid: 顯示指定進(jìn)程的子進(jìn)程
?按確切的程序名稱:/sbin/pidof
? pidof bash? 顯示進(jìn)程的關(guān)閉還是打開狀態(tài),可以用echo $? 返回執(zhí)行結(jié)果
系統(tǒng)工具
?uptime:
顯示當(dāng)前時(shí)間,系統(tǒng)已啟動(dòng)的時(shí)間、當(dāng)前上線人數(shù),系統(tǒng)平均負(fù)載(1、5、10分鐘的平均負(fù)載,一般不會(huì)超過1)
?系統(tǒng)平均負(fù)載:指在特定時(shí)間間隔內(nèi)運(yùn)行隊(duì)列中的平均進(jìn)程數(shù)
?通常每個(gè)CPU內(nèi)核的當(dāng)前活動(dòng)進(jìn)程數(shù)不大于3,那么系統(tǒng)的性能良好。如果每個(gè)CPU內(nèi)核的任務(wù)數(shù)大于5,那么此主機(jī)的性能有嚴(yán)重問題
?如果linux主機(jī)是1個(gè)雙核CPU,當(dāng)Load Average 為6的時(shí)候說(shuō)明機(jī)器已經(jīng)被充分使用
top進(jìn)程管理工具
?? top:有許多內(nèi)置命令
? 排序:
? P:以占據(jù)的CPU百分比,%CPU
? M:占據(jù)內(nèi)存百分比,%MEM
? T:累積占據(jù)CPU時(shí)長(zhǎng),TIME+
?首部信息顯示:
? uptime信息:l命令
? tasks及cpu信息:t命令
? cpu分別顯示:1 (數(shù)字)
? memory信息:m命令
? 退出命令:q
? 修改刷新時(shí)間間隔:s
? 終止指定進(jìn)程:k
? 保存文件:W
? 選項(xiàng):
-d #??指定刷新時(shí)間間隔,默認(rèn)為3秒
-b??全部顯示所有進(jìn)程
-n #??刷新多少次后退出
-H 線程模式,示例:top -H -p `pidof mysqld`
??欄位信息簡(jiǎn)介
?us:用戶空間
?sy:內(nèi)核空間?
?ni:調(diào)整nice時(shí)間
?id:空閑
?wa:等待IO時(shí)間
?hi:硬中斷
?si:軟中斷(模式切換)
?st:虛擬機(jī)偷走的時(shí)間
? htop命令:此命令需用EPEL源進(jìn)行YUM安裝之后才有
?選項(xiàng):
?-d #: 指定延遲時(shí)間;
?-u UserName: 僅顯示指定用戶的進(jìn)程
?-s COLUME: 以指定字段進(jìn)行排序
子命令:
?s:跟蹤選定進(jìn)程的系統(tǒng)調(diào)用
?l:顯示選定進(jìn)程打開的文件列表
?a:將選定的進(jìn)程綁定至某指定CPU核心
?t:顯示進(jìn)程樹
free :命令顯示內(nèi)存空間
??內(nèi)存空間使用狀態(tài):
? free [OPTION]
? ?-b 以字節(jié)為單位
? ?-m 以MB為單位
? ?-g 以GB為單位
? ?-h 易讀格式
? ?-o 不顯示-/+buffers/cache行
? ?-t 顯示RAM + swap的總和
? ?-s n 刷新間隔為n秒
? ?-c n 刷新n次后即退出
vmstat內(nèi)存工具
?? vmstat命令:虛擬內(nèi)存信息
? vmstat [options] [delay [count]]
? vmstat 2 5
? procs:
? r:可運(yùn)行(正運(yùn)行或等待運(yùn)行)進(jìn)程的個(gè)數(shù),和核心數(shù)有關(guān)
? b:處于不可中斷睡眠態(tài)的進(jìn)程個(gè)數(shù)(被阻塞的隊(duì)列的長(zhǎng)度)
? memory:
? swpd: 交換內(nèi)存的使用總量
? free:空閑物理內(nèi)存總量
? buffer:用于buffer的內(nèi)存總量
? cache:用于cache的內(nèi)存總量
? swap:
? si:從磁盤交換進(jìn)內(nèi)存的數(shù)據(jù)速率(kb/s)
? so:從內(nèi)存交換至磁盤的數(shù)據(jù)速率(kb/s)
? io:
? bi:從塊設(shè)備讀入數(shù)據(jù)到系統(tǒng)的速率(kb/s)
? bo: 保存數(shù)據(jù)至塊設(shè)備的速率
? system:
? in: interrupts 中斷速率,包括時(shí)鐘
? cs: context switch 進(jìn)程切換速率
? cpu:
? us:Time spent running non-kernel code
? sy: Time spent running kernel code
? id: Time spent idle. Linux 2.5.41前,包括IO-wait time.
? wa: Time spent waiting for IO. 2.5.41前,包括in idle.
? st: Time stolen from a virtual machine. 2.6.11前, unknown.
? 選項(xiàng):
? -s: 顯示內(nèi)存的統(tǒng)計(jì)數(shù)據(jù)
iostat:統(tǒng)計(jì)CPU和設(shè)備IO信息
?示例:iostat 1 10
pmap命令:進(jìn)程對(duì)應(yīng)的內(nèi)存映射
??pmap [options] pid [...]
? -x: 顯示詳細(xì)格式的信息
? 示例:pmap 1
??另外一種實(shí)現(xiàn):
? cat /proc/PID/maps
glances系統(tǒng)監(jiān)控工具
?? glances命令:需要EPEL源安裝
?? glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]
?? 內(nèi)建命令:
? a Sort processes automatically l Show/hide logs
? c Sort processes by CPU% b Bytes or bits for network I/O
? m Sort processes by MEM% w Delete warning logs
? p Sort processes by name x Delete warning and critical logs
? i Sort processes by I/O rate 1 Global CPU or per-CPU stats
? d Show/hide disk I/O stats h Show/hide this help screen
? f Show/hide file system stats t View network I/O as combination
? n Show/hide network stats u View cumulative network I/O
? s Show/hide sensors stats q Quit (Esc and Ctrl-C also work)
? y Show/hide hddtemp stats
??常用選項(xiàng):
? -b: 以Byte為單位顯示網(wǎng)卡數(shù)據(jù)速率
? -d: 關(guān)閉磁盤I/O模塊
? -f /path/to/somefile: 設(shè)定輸入文件位置
? -o {HTML|CSV}:輸出格式
? -m: 禁用mount模塊
? -n: 禁用網(wǎng)絡(luò)模塊
? -t #: 延遲時(shí)間間隔
? -1:每個(gè)CPU的相關(guān)數(shù)據(jù)單獨(dú)顯示
dstat系統(tǒng)監(jiān)控工具
??dstat命令:系統(tǒng)資源統(tǒng)計(jì),代替vmstat,iostat
??dstat [-afv] [options..] [delay [count]]
? -c??顯示cpu相關(guān)信息
? -C #,#,...,total
? -d??顯示disk相關(guān)信息
? -D total,sda,sdb,...
? -g??顯示page相關(guān)統(tǒng)計(jì)數(shù)據(jù)
? -m??顯示memory相關(guān)統(tǒng)計(jì)數(shù)據(jù)
? -n??顯示network相關(guān)統(tǒng)計(jì)數(shù)據(jù)
? -p??顯示process相關(guān)統(tǒng)計(jì)數(shù)據(jù)
? -r??顯示io請(qǐng)求相關(guān)的統(tǒng)計(jì)數(shù)據(jù)
? -s??顯示swapped相關(guān)的統(tǒng)計(jì)數(shù)據(jù)
??--tcp
??--udp
??--unix
??--raw
??--socket
??--ipc
??--top-cpu:顯示最占用CPU的進(jìn)程
??--top-io: 顯示最占用io的進(jìn)程
??--top-mem: 顯示最占用內(nèi)存的進(jìn)程
??--top-latency: 顯示延遲最大的進(jìn)程
iotop監(jiān)視磁盤狀況
?? iotop命令是一個(gè)用來(lái)監(jiān)視磁盤I/O使用狀況的top類工具iotop具有與top相似的UI,其中包括PID、用戶、I/O、進(jìn)程等相關(guān)信息,可查看每個(gè)進(jìn)程是如何使用IO
?? iotop輸出
? 第一行:Read和Write速率總計(jì)
? 第二行:實(shí)際的Read和Write速率
? 第三行:參數(shù)如下:
? 線程ID(按p切換為進(jìn)程ID)
? 優(yōu)先級(jí)
? 用戶
? 磁盤讀速率
? 磁盤寫速率
? swap交換百分比
? IO等待所占的百分比
? 線程/進(jìn)程命令
??-o, --only只顯示正在產(chǎn)生I/O的進(jìn)程或線程,除了傳參,可以在運(yùn)行過程中按o生效
??-b, --batch非交互模式,一般用來(lái)記錄日志
??-n NUM, --iter=NUM設(shè)置監(jiān)測(cè)的次數(shù),默認(rèn)無(wú)限。在非交互模式下很有用
??-d SEC, --delay=SEC設(shè)置每次監(jiān)測(cè)的間隔,默認(rèn)1秒,接受非×××數(shù)據(jù)例如1.1
??-p PID, --pid=PID指定監(jiān)測(cè)的進(jìn)程/線程
??-u USER, --user=USER指定監(jiān)測(cè)某個(gè)用戶產(chǎn)生的I/O
??-P, --processes僅顯示進(jìn)程,默認(rèn)iotop顯示所有線程
??-a, --accumulated顯示累積的I/O,而不是帶寬
??-k, --kilobytes使用kB單位,而不是對(duì)人友好的單位。在非交互模式下,腳本編程有用
iotop常用參數(shù)和快捷鍵
??-t, --time 加上時(shí)間戳,非交互非模式
??-q, --quiet 禁止頭幾行,非交互模式,有三種指定方式
?? -q 只在第一次監(jiān)測(cè)時(shí)顯示列名
?? -qq 永遠(yuǎn)不顯示列名
?? -qqq 永遠(yuǎn)不顯示I/O匯總
??交互按鍵
left和right方向鍵:改變排序
?r:反向排序
?o:切換至選項(xiàng)--only
?p:切換至--processes選項(xiàng)
?a:切換至--accumulated選項(xiàng)
?q:退出
?i:改變線程的優(yōu)先級(jí)
Lsof
?? Lsof:list open files查看當(dāng)前系統(tǒng)文件的工具。在linux環(huán)境下,一切皆文件,用戶通過文件不僅可以訪問常規(guī)數(shù)據(jù),還可以訪問網(wǎng) 絡(luò)連接和硬件如傳輸控制協(xié)議 (TCP) 和用戶數(shù)據(jù)報(bào)協(xié)議 (UDP)套接字等,系統(tǒng)在后臺(tái)都為該應(yīng)用程序分配了一個(gè)文件描述符
?? 命令參數(shù)
?? -a:列出打開文件存在的進(jìn)程
?? -c<進(jìn)程名>:列出指定進(jìn)程所打開的文件
?? -g:列出GID號(hào)進(jìn)程詳情
?? -d<文件號(hào)>:列出占用該文件號(hào)的進(jìn)程
?? +d<目錄>:列出目錄下被打開的文件
?? +D<目錄>:遞歸列出目錄下被打開的文件
?? -n<目錄>:列出使用NFS的文件
?? -i<條件>:列出符合條件的進(jìn)程(4、6、協(xié)議、:端口、 @ip )
?? -p<進(jìn)程號(hào)>:列出指定進(jìn)程號(hào)所打開的文件
?? -u:列出UID號(hào)進(jìn)程詳情
?? -h:顯示幫助信息
?? -v:顯示版本信息。
?? -n: 不反向解析網(wǎng)絡(luò)名字
?? 進(jìn)程管理
?? 查看由登陸用戶啟動(dòng)而非系統(tǒng)啟動(dòng)的進(jìn)程:lsof /dev/pts1
?? 指定進(jìn)程號(hào),可以查看該進(jìn)程打開的文件:lsof -p 9527
?? 文件管理
?? 查看指定程序打開的文件:lsof -c httpd
?? 查看指定用戶打開的文件:lsof -u root | more
?? 查看指定目錄下被打開的文件
? lsof +D /var/log/
? lsof +d /var/log/
? 參數(shù)+D為遞歸列出目錄下被打開的文件,參數(shù)+d為列出目錄下被打開的文件
?? 網(wǎng)絡(luò)管理?
?? 查看所有網(wǎng)絡(luò)連接:lsof -i –n lsof -i@127.0.0.1
?通過參數(shù)-i查看網(wǎng)絡(luò)連接的情況,包括連接的ip、端口等以及一些服務(wù)的連接情況,例如:
?sshd等。也可以通過指定ip查看該ip的網(wǎng)絡(luò)連接情況
?? 查看端口連接情況:lsof -i :80 -n
?通過參數(shù)-i:端口可以查看端口的占用情況,-i參數(shù)還有查看協(xié)議,ip的連接情況等
?? 查看指定進(jìn)程打開的網(wǎng)絡(luò)連接:lsof -i –n -a -p 9527
? 參數(shù)-i、-a、-p等,-i查看網(wǎng)絡(luò)連接情況,-a查看存在的進(jìn)程,-p指定進(jìn)程
?? 查看指定狀態(tài)的網(wǎng)絡(luò)連接
? lsof -n -P -i TCP -s TCP:ESTABLISHED
? -n:no host names, -P:no port names,-i TCP指定協(xié)議,-s指定協(xié)議狀態(tài)通過多個(gè)參數(shù)可以
? 清晰的查看網(wǎng)絡(luò)連接情況、協(xié)議連接情況等
?恢復(fù)刪除文件(前提是使用此文件的程序未關(guān)閉)
? lsof |grep /var/log/messages
? rm -f /var/log/messages
? lsof |grep /var/log/messages
? cat /proc/653/fd/6
? cat /proc/653/fd/6 > /var/log/messages
進(jìn)程管理工具
? kill命令:
向進(jìn)程發(fā)送控制信號(hào),以實(shí)現(xiàn)對(duì)進(jìn)程管理,每個(gè)信號(hào)對(duì)應(yīng)一個(gè)數(shù)字,信號(hào)名稱以SIG開頭(可省略),不區(qū)分大小寫
?顯示當(dāng)前系統(tǒng)可用信號(hào): kill –l,trap -l
?常用信號(hào):man 7 signal
?1) SIGHUP: 無(wú)須關(guān)閉進(jìn)程而讓其重讀配置文件
?2) SIGINT: 中止正在運(yùn)行的進(jìn)程;相當(dāng)于Ctrl+c
?3) SIGQUIT:相當(dāng)于ctrl+\
?9) SIGKILL: 強(qiáng)制殺死正在運(yùn)行的進(jìn)程
?15) SIGTERM:終止正在運(yùn)行的進(jìn)程
?18) SIGCONT:繼續(xù)運(yùn)行
?19) SIGSTOP:后臺(tái)休眠
?指定信號(hào)的方法:
?(1) 信號(hào)的數(shù)字標(biāo)識(shí):1, 2, 9
?(2) 信號(hào)完整名稱:SIGHUP?
?(3) 信號(hào)的簡(jiǎn)寫名稱:HUP
?按PID:kill [-SIGNAL] pid …:? kill –n SIGNAL pid;kill –s SIGNAL pid
?按名稱:killall [-SIGNAL] comm…
?按模式:pkill [options] pattern? 可以跟模式進(jìn)行匹配
-SIGNAL
-u uid: effective user,生效者
-U uid: real user,真正發(fā)起運(yùn)行命令者
-t terminal: 與指定終端相關(guān)的進(jìn)程
-l: 顯示進(jìn)程名(pgrep可用)
-a: 顯示完整格式的進(jìn)程名(pgrep可用)
-P pid: 顯示指定進(jìn)程的子進(jìn)程
轉(zhuǎn)載于:https://blog.51cto.com/13498416/2169220
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的linux基础篇-系统中进程相关概念的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【重磅】央行发大招!最全面的支付安全风险
- 下一篇: 日期型转json格式(springboo