Linux基礎(chǔ)教程之進(jìn)程查看和管理及作業(yè)控制
在Linux系統(tǒng)中,內(nèi)核的功用有:進(jìn)程管理、文件系統(tǒng)、網(wǎng)絡(luò)功能、內(nèi)存管理、驅(qū)動(dòng)程序、安全功能等,在這眾多的模塊中,進(jìn)程管理是相對(duì)重要的一環(huán),即使不像文件系統(tǒng)和網(wǎng)絡(luò)功能那么復(fù)雜。在進(jìn)程管理中,內(nèi)核對(duì)進(jìn)程的創(chuàng)建、切換、撤銷和調(diào)度都有很詳細(xì)的定義。
1、進(jìn)程類型
守護(hù)進(jìn)程:在系統(tǒng)引導(dǎo)過(guò)程中啟動(dòng)的進(jìn)程,跟終端無(wú)關(guān)的進(jìn)程
前臺(tái)進(jìn)程:跟終端相關(guān),通過(guò)終端啟動(dòng)的進(jìn)程
注意:也可把在前臺(tái)啟動(dòng)的進(jìn)程送往后臺(tái),以守護(hù)模式運(yùn)行
2、進(jìn)程狀態(tài)
? ?在內(nèi)存中運(yùn)行的進(jìn)程也有著各種各樣的狀態(tài)
運(yùn)行態(tài)R:running
就緒態(tài):ready
睡眠態(tài)
可中斷S:interruptable
不可中斷D:uninterruptable
停止態(tài)T:stopped,暫停于內(nèi)存中,但不會(huì)被調(diào)度,除非手動(dòng)啟動(dòng)
僵死態(tài)Z:zombie,結(jié)束進(jìn)程,父進(jìn)程結(jié)束前,子進(jìn)程不關(guān)閉
3、進(jìn)程調(diào)度
調(diào)度策略:調(diào)度策略就是這樣一組規(guī)則:決定什么時(shí)候以怎樣的方式選擇一個(gè)新進(jìn)程運(yùn)行。所以定義一個(gè)進(jìn)程的優(yōu)先級(jí)來(lái)滿足這樣一種策略。這個(gè)策略以0-139的優(yōu)先級(jí)來(lái)表示。
實(shí)時(shí)優(yōu)先級(jí):1-99
無(wú)需調(diào)整,數(shù)字越大,優(yōu)先級(jí)越高
靜態(tài)優(yōu)先級(jí):100-139
可調(diào)整,數(shù)字越小,優(yōu)先級(jí)越高?
優(yōu)先級(jí)以Nice值調(diào)整
Nice:-20—-19 ,存在于task_struct結(jié)構(gòu)體中
公式如下:
????pri(new)=nice+pri(old) ?
調(diào)度算法:早起的Linux中,調(diào)度算法是根據(jù)進(jìn)程的優(yōu)先級(jí)選擇“最佳”進(jìn)程來(lái)執(zhí)行,它的缺點(diǎn)是時(shí)間開(kāi)銷與“可運(yùn)行進(jìn)程數(shù)量”有關(guān)。某種調(diào)度算法一定滿足一種函數(shù)關(guān)系,業(yè)界稱為Big O
Big O:時(shí)間復(fù)雜度,用時(shí)和規(guī)模的關(guān)系。有:
O(1), O(logn), O(n)線性, O(n^2)拋物線, O(2^n)
4、進(jìn)程管理命令之pstree
pstree – display a tree of processes
顯示進(jìn)程數(shù)
5、進(jìn)程管理命令之ps
Linux系統(tǒng)各進(jìn)程的相關(guān)信息均保存在/proc/PID目錄下的各文件中;
ps [OPTION]…
選項(xiàng):支持兩種風(fēng)格
常用組合:aux
u: 以用戶為中心組織進(jìn)程狀態(tài)信息顯示
a: 與終端相關(guān)的進(jìn)程;
x: 與終端無(wú)關(guān)的進(jìn)程;
~]# ps aux
USER ? ? ? ?PID %CPU %MEM ? ?VSZ ? RSS TTY ? ? ?STAT TART ? TIME COMMAND
USER | 運(yùn)行進(jìn)程的用戶 |
PID | 進(jìn)程ID |
%CPU | 占用CPU |
%MEM | 占用內(nèi)存 |
VSZ | 虛擬內(nèi)存集 |
RSS | 實(shí)際內(nèi)存集 |
TTY | 終端信息 |
STAT | 進(jìn)程狀態(tài) |
START | 進(jìn)程狀態(tài) |
TIME | 運(yùn)行時(shí)間 |
COMMAND | 進(jìn)程名稱 |
常用組合:-ef
–e: 顯示所有進(jìn)程
-f: 顯示完整格式程序信息
常用組合:-eFH
-F: 顯示完整格式的進(jìn)程信息
-H: 以進(jìn)程層級(jí)格式顯示進(jìn)程相關(guān)信息
6、進(jìn)程管理命令之pkill
pkill [options] pattern ? ?
-u uid: effective user
-U uid: real user
-t terminal: 與指定終端相關(guān)的進(jìn)程
-l: 顯示進(jìn)程名
-a: 顯示完整格式的進(jìn)程名
-P pid: 顯示其父進(jìn)程為此處指定的進(jìn)程的進(jìn)程列表
7、進(jìn)程管理命令之pidof
根據(jù)進(jìn)程名獲取其PID
8、進(jìn)程管理命令之top
Tasks
total | 進(jìn)程總數(shù) |
running | 運(yùn)行進(jìn)程數(shù) |
sleeping | 休眠態(tài)進(jìn)程數(shù) |
stopped | 停止態(tài)進(jìn)程數(shù) |
zobie | 僵死態(tài)進(jìn)程數(shù) |
%Cpu(s)
us(user space) | 用戶空間占用CPU百分比 |
sy(system) | 內(nèi)核空間占用CPU百分比 ? 注:高負(fù)載時(shí):us:sy=7:3 |
ni(nice) | 修改nice值占用的CPU百分比 |
id(idle) | 空閑的CPU百分比 |
wa(wait) | 等待IO完成占用的CPU百分比 |
hi(hardware interrupt) | 硬中斷占用CPU百分比 |
si(software interrupt) | 軟中斷占用CPU百分比 |
st(stole) | 被偷走的CPU,比如VMware |
buffer(緩沖) | 元數(shù)據(jù) |
cache(緩存) | 數(shù)據(jù) |
PID | 進(jìn)程號(hào) |
USER | 進(jìn)程發(fā)起者 |
PR(priority) | 優(yōu)先級(jí) |
NI(Nice) | nice值 |
VIRT | 虛擬內(nèi)存集 |
RES | 常駐內(nèi)存集 |
SHR | 共享內(nèi)存集 |
S(status) | 狀態(tài) |
%CPU | CPU占用比 |
%MEM | 內(nèi)存占用比 |
TIME+ | 運(yùn)行時(shí)長(zhǎng) |
COMMAND | 啟動(dòng)進(jìn)程 |
對(duì)顯示排序的方法:
P | 占據(jù)的CPU百分比 |
M | 占據(jù)內(nèi)存百分比 |
T | 累積占據(jù)CPU時(shí)長(zhǎng) |
首部信息顯示:
l | uptime信息 |
t | tasks及cpu信息 |
#數(shù)字 | cpu分別顯示 |
m | memory信息 |
s | 修改刷新時(shí)間間隔 |
Esc | 退出 |
k | 終止指定進(jìn)程 |
W | 保存文件 |
q | 退出命令 |
9、進(jìn)程管理命令之htop
=
比top更加高級(jí)的進(jìn)程管理軟件
f1幫助
f2切換CPU、mem、swap顯示方式
f10退出
常用選項(xiàng):
-d #: 指定延遲時(shí)間;
-u UserName: 僅顯示指定用戶的進(jìn)程;
-s COLOMN: 以指定字段進(jìn)行排序;
命令:
s: 跟蹤選定進(jìn)程的系統(tǒng)調(diào)用;
l: 顯示選定進(jìn)程打開(kāi)的文件列表;
a:將選定的進(jìn)程綁定至某指定CPU核心;
t: 顯示進(jìn)程樹(shù)
注意:Fedora-EPEL源
10、進(jìn)程管理命令之vmstat
vmstat -s: 內(nèi)存的匯總信息
procs | 項(xiàng)目 |
r | 等待運(yùn)行的進(jìn)程的個(gè)數(shù),和核心數(shù)有關(guān) |
b | 處于不可中斷睡眠態(tài)的進(jìn)程個(gè)數(shù)(被阻塞的隊(duì)列的長(zhǎng)度) |
swap | 項(xiàng)目 |
si | 從磁盤(pán)交換進(jìn)內(nèi)存的數(shù)據(jù)速率(kb/s) |
so | 從內(nèi)存交換至磁盤(pán)的數(shù)據(jù)速率(kb/s) |
io | 項(xiàng)目 |
bi | 從塊設(shè)備讀入數(shù)據(jù)到內(nèi)存的速率(kb/s) ? ?讀 |
bo | 從內(nèi)存寫(xiě)入磁盤(pán)的速率(kb/s) ?? ? ? ? ? 寫(xiě) |
memory | 項(xiàng)目 |
swad | 交換內(nèi)存的使用總量 |
free | 空閑物理內(nèi)存總量 |
buffer | 用于buffer的內(nèi)存總量 |
cache | 用于cache的內(nèi)存總量 |
system | 項(xiàng)目 |
in: interrupts | 中斷速率 |
cs: context switch | 進(jìn)程切換速率 |
cpu | 項(xiàng)目 |
us | 用戶空間占用的比例 |
sy | 內(nèi)核空間占用的比例 |
id | 空閑空間占用的比例 |
wa | 等待IO完成所消耗的時(shí)間比例 |
st | 被虛擬化技術(shù)偷走的時(shí)間比例 |
11、進(jìn)程管理命令之glances
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)閉磁盤(pá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ú)顯示;
C/S模式下運(yùn)行g(shù)lances命令:
服務(wù)模式:
glances -s -B IPADDR
IPADDR: 指明監(jiān)聽(tīng)于本機(jī)哪個(gè)地址
客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務(wù)器端地址
12、進(jìn)程管理命令之dstat
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ù);
–top-cpu:顯示最占用CPU的進(jìn)程;
–top-io: 顯示最占用io的進(jìn)程;
–top-mem: 顯示最占用內(nèi)存的進(jìn)程;
–top-lantency: 顯示延遲最大的進(jìn)程;
13、進(jìn)程管理命令之kill
kill命令:
向進(jìn)程發(fā)送控制信號(hào),以實(shí)現(xiàn)對(duì)進(jìn)程管理
顯示當(dāng)前系統(tǒng)可用信號(hào):
# kill -l
# man 7 signal
常用信號(hào):
1) SIGHUP: 無(wú)須關(guān)閉進(jìn)程而讓其重讀配置文件;
2) SIGINT: 中止正在運(yùn)行的進(jìn)程;相當(dāng)于Ctrl+c;
9) SIGKILL: 殺死正在運(yùn)行的進(jìn)程;
15) SIGTERM:終止正在運(yùn)行的進(jìn)程;
18) SIGCONT:
19) SIGSTOP:
指定信號(hào)的方法:
(1) 信號(hào)的數(shù)字標(biāo)識(shí);1, 2, 9
(2) 信號(hào)完整名稱;SIGHUP
(3) 信號(hào)的簡(jiǎn)寫(xiě)名稱;HUP
向進(jìn)程發(fā)信號(hào):
kill [-SIGNAL] PID…
終止“名稱”之下的所有進(jìn)程:
killall [-SIGNAL] Program
14、Linux的作業(yè)控制
前臺(tái)作業(yè):通過(guò)終端啟動(dòng),且啟動(dòng)后一直占據(jù)終端;
后臺(tái)作業(yè):可以通過(guò)終端啟動(dòng),但啟動(dòng)后即轉(zhuǎn)入后臺(tái)運(yùn)行(釋放終端);
如何讓作業(yè)運(yùn)行于后臺(tái)?
(1) 運(yùn)行中的作業(yè)
Ctrl+z
(2) 尚未啟動(dòng)的作業(yè)
# COMMAND &
此類作業(yè)雖然被送往后臺(tái)運(yùn)行,但其依然與終端相關(guān);如果希望送往后臺(tái)后,剝離與終端的關(guān)系:
# nohup COMMAND &
查看所有作業(yè):
# jobs
作業(yè)控制:
# fg [[%]JOB_NUM]:把指定的后臺(tái)作業(yè)調(diào)回前臺(tái);
# bg [[%]JOB_NUM]:讓送往后臺(tái)的作業(yè)在后臺(tái)繼續(xù)運(yùn)行;
# kill [%JOB_NUM]:終止指定的作業(yè);