一、進程概念
進程是內核的一個功能,在Linux中,運行一個程序或命令可以出發一個事件而驅動一個PID,在linux系統中,系統只識別二進制程序文件,我們可以通過執行系統上的二進制程序來運行程序,進而產生進程。在linux系統中第一個進程是init程序,它是系統開機第一個加載的程序,用來支撐系統的正常運行的一個程序,內核啟動的一個用戶級進程。
1.進程優先級
進程優先級被分為系統優先級和實時優先級
系統優先級:數字越小,優先級越高
0-139(老版本操作系統如4,5)
各有140個運行隊列和過期隊列,當一個進程支執行完成后會將進程放到過期隊列上來,如果一個進程的優先級低,進程執行了一會,系統將會把它丟到過期隊列當中來。
實時優先級:99-0:值越大優先級越高
nice值:-20,19對應系統優先級100-139或99
2.進程狀態
在linux中,進程是搶占式多任務的,進程的類型被分為:
守護進程:在系統引導過程中啟動的進程,即跟終端無關的進程
前臺進程:跟終端有關,通過終端啟動的進程;需要注意的是,也可以吧前臺啟動的進程送往后臺,以守護模式運行。
運行態: running進程正在運行中
就緒態:ready
睡眠態:sleeping
可中斷:interruptable
不可中斷:uninterruptable,通常是指被IO阻塞的進程,等待IO滿足之前無法繼續運行
停止態:stopped,暫停于內存中,但不會被調度,除非手動啟動
僵死態:zombie,進程結束,父進程結束前,子進程不關閉
根據進程占用資源的多少可以將進程分為:
CPU密集型:對CPU占用率高的進程
IO密集型:等待I/O時間長的進程
3.進程管理
在linux系統中,有很多的進程都在運行,但其中有一個程序很重要,那該如何讓這個最重要的程序先運行呢,所以這些情況下,我們都應該先查詢系統當前運行的進程,此時我們可以通過一些進程的管理工具來獲得進程的管理工具有:top,pstree,ps,pidof,pgrep,pkill,htop,glances,pmap,vmstate,dstat,iostat,sar,kill,jobs,bg,fg等
pstree:以顯示當前系統上的進程樹
ps:process state 進程狀態
默認顯示當前終端中的進程
命令格式:ps [options]
-a:所有與終端有關的進程
-x:所有與終端無關的進程,通常與-a選項一起使用,可列出教完整信息
-u:顯示與進程所有者的信息
-f:顯示進程的父進程
-l:較長、教詳細的將該PID信息列出
-o 顯示指定的信息如 pid(進程號),comm(命令),%cpu(cpu占用百分比),%mem(內存占用百分比),state(進程狀態),tty(終端),euser(進程生效者),ruser(進程真正執行者)
組合選項
-ef
-e:顯示所有進程
-f:顯示完整格式程序信息
-eFH
-F:顯示更完整格式的進程信息
-H:以進程層級格式顯示進程相關信息
ps顯示字段解釋
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 19352 1552 ? Ss 15:41 0:01 /sbin/init
root 2 0.0 0.0 0 0 ? S 15:41 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S 15:41 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S 15:41 0:00 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S 15:41 0:00 [stopper/0]
root 6 0.0 0.0 0 0 ? S 15:41 0:00 [watchdog/0]
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
—————————————————————————————————————————–
USER:用戶
PID:進程ID
%CPU:占用cpu百分比
%MEM:占用內存百分比
VSZ:Virtual memory Size,虛擬內存集,線性內存
RSS:ReSident Size,常駐內存及
STAT:進程狀態
R:running
s:interruptable sleeping
D:uninterruptable sleeping
T:stopped
Z:zombie
+:前臺進程
l:多線程進程
N:低優先級進程
<:高優先級進程
s:session leader,會話進程首進程
START:進程起始時間
TIME:進程運行時長
COMMAND:運行進程的命令
ni:nice值
pri:priority優先級
psr:processor,cpu編號
rtprio:實時優先級
pgrep 搜索進程
pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,…] [-g pgrp,…] [-s sid,…] [-u euid,…] [-U uid,…] [-G gid,…] [-t term,…] [pattern]
-u uid:進程生效者
-U uid:進程真正發起者(比如我普通用戶運行passwd運行,可執行程序passwd有suid它是以root的身份來運行程序,但進程真正的發起者是普通用戶)
-t terminal:與指定終端相關的進程
-l:顯示進程名
-a:顯示完整格式的進程名
-p pid:顯示指定進程的子進程
示例:
pgrep -u hadoop 查找生效者是hadoop用戶的進程
pgrep -t pts/2
pidof 根據程序名查找pid
命令格式:pidof [-s] [-c] [-x] [-m] [-o omitpid] [-o omitpid..] program [program..]
如pidof bash
uptime
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分鐘的分軍服在,一般不會超過1)
系統平均負載:在特定時間間隔內運行隊列中的平均進程數
如果每個CPU內核當前活動的進程數不大于3,那么系統新能良好,如果CPU內核任務數大于5,這臺機器性能有嚴重問題,如果主機是一個雙核CPU的話,當Load Average為6的時候說明機器已經被充分使用了
20:49:12 up 5:07, 3 users, load average: 0.00, 0.02, 0.05
4.進程管理工具
top
top欄位信息介紹
us:用戶空間
sy:內核控件
ni:調整nice時間
id:空閑
wa:I/O等待時間
hi:硬終端
si:軟終端(模式切換)
st:被偷走的時間
PID:任務的進程ID
PPID:父進程ID
RUSER:進程真正執行者
UID:任務所有者ID
USER:任務所有者名稱
GROUP:任務所有者群組名
TTY:終端
PR:優先級
%CPU:CPU使用率
%MEM:內存使用率
S:進程狀態
TIME+:CPU時間,精確到秒
top命令有許多命令,當我們執行top命令后,在交互界面敲一下鍵會顯示不同的效果
排序
P:以占據CPU百分比排序 %CPU
M:以占據內存百分比排序 %MEM
T:累計占據CPU時長,TIME+
首部信息顯示:
uptime信息: l命令
tasks及cpu信息:t命令
cpu分別顯示:1(數字)
memory信息: m命令
退出命令:q
修改刷新時間間隔: s #
終止指定進程: k pid
保存文件:W,默認保存在/root/.toprc文件中
選項:
-d #:指定刷新時間間隔,默認為3秒
-b:以批次方式顯示
-n #:顯示多少批次
htop命令該命令系統默認不會安裝,需要從epel源上安裝htop命令
命令格式: htop [-dChusv]
選項:
-d # :指定延遲時間
-u username:僅顯示指定用戶的進程
-s colume :以指定字段進行排序
子命令:(在執行htop命令后在進入界面輸入一下子命令)
s:跟蹤選定進程的系統調用
l:顯示選定進程打開的文件列表
a:選定的進程綁定至某指定CPU核心
t:顯示進程樹
5.內存工具
vmstate命令:虛擬內存信息
vmstat[options] [delay [count]]
vmstat 2 5每兩秒顯示一次,一共顯示五次,然后退出
procs ———–memory———- —swap-– —–io-— —system— —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1169128 32640 403716 0 0 8 1 12 9 0 0 100 0 0
1 0 0 1169048 32640 403720 0 0 0 0 37 26 0 0 100 0 0
0 0 0 1169048 32648 403720 0 0 0 6 46 48 0 0 100 0 0
0 0 0 1169112 32648 403720 0 0 0 16 42 33 0 0 100 0 0
1 0 0 1169112 32648 403720 0 0 0 0 40 26 0 0 100 0 0
欄位信息
procs
r:等待運行的進程個數,和核心數有關
b:處于不可中斷睡眠態的進程個數(被阻塞的隊列長度)
memory
swap:交換內存的使用總量
free:空閑屋里內存總量
buffer:用于緩沖的內存總量
cache:用于緩存的內存總量
swap
si:從磁盤交換內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)
io
bi:從塊設備讀入數據到系統的速率(kb/s)
bo:保存數據到塊設備的速率(kb/s)
system
in:interrupts,中斷速率,包括時鐘
cs:context switch,進程切換速率
cpu
us:用戶空間
sy:內核控件
ni:調整nice時間
id:空閑
wa:I/O等待時間
hi:硬終端
si:軟終端(模式切換)
st:被偷走的時間
選項
-s:顯示內存的統計數據
pmap:進程對應的內存映射
命令格式:pmap [ -x | -d ] [ -q ] pids…
-x:顯示詳細格式的信息
或者查看文件來顯示此信息
cat /proc/pid/pmap pid進程編號
系統監控工具
glances
命令格式glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [–password] [-t refresh] [-f file] [-o output]
選項
-b:以Byte為單位顯示網卡的數據速率
-d:關閉磁盤I/O模塊
-f: /path/to/somefile:設定輸入文件位置
-o {html|csv}:輸出格式
-m:禁用mount模塊
-n:禁用網絡模塊
-t #:延遲時間間隔
-l:每個CPU相關數據單獨顯示
C/S模式下運行glances
服務模式:
glances –s –B ip
客戶端模式
glances –c ip
dstate命令,系統資源統計
命令格式: dstat [-afv] [options..] [delay [count]]
-c:顯示CPU相關信息
-d:顯示disk相關信息
-g:顯示page相關統計信息
-m:顯示內存相關統計信息
-n:顯示網絡相關統計信息
-p:顯示進程相關統計信息
-r:顯示io請求相關的同屬數據
-s:顯示swaped相關的統計數據
6. 進程管理工具
重要的信號
1)SINGHUP:讓一個進程不用重啟就可以重讀其配置文件,并讓新的配置信息生效
2)SIGINT:中止正在運行的進程相當于ctrl+c
9)SINGKILL:殺死正在運行的進程
15)SINGTERM:終止正在運行的進程,正常結束進程
18)SINGCONT:繼續運行一個進程
19)SINGSTOP:后臺休眠
指定信號的方法:
信號的數字標識:1,2,9
信號完整名稱:SIGHUP
信號簡寫名稱:HUP
殺死進程
kill命令
命令格式kill [-s signal|-p] [–] pid..
示例:
kill -1 120 使用1號信號重讀該進程的配置文件
kill -9 120 強制殺死該進程
killall command(當某個命令運行多個進程時,想殺死該命令產生的全部進程)
pkill
命令格式:pgrep [-flvx] [-d delimiter] [-n|-o] [-P ppid,…] [-g pgrp,…] [-s sid,…] [-u euid,…] [-U uid,…] [-G gid,…]
-SIGNAL
-u uid: 生效者
-U uid :real user ,進程真正發起者
-t terminal:與指定終端相關的進程
-l:顯示進程名
-a:顯示整格式的進程名
-P pid:顯示父進程為此處指定的進程的進程列表
示例:
pkill -u hadoop
pkill -t pts/3
二、作業管理
Linux的作業控制
前臺作業:通過終端啟動,且啟動后一直占據終端
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
運行中的作業 ctrl+z讓作業運行與后臺
command & 作業未啟動是執行此操作讓作業進入后臺
后臺作業雖然被送往后臺運行,但依然與終端相關,退出終端,將關閉后臺作業。
nohup command screen command 剝離與終端的關系,即使終端斷開,也依然運行
jobs:查看所有作業
[root@server ~]# jobs
[1] Stopped vim
[2]- Stopped find / -name a
[3]+ Stopped vim
1.作業控制
fg[[%]JOB_NUM]:把指定的后臺作業調回前臺;
bg[[%]JOB_NUM]:讓送往后臺的作業在后臺繼續運行;
kill [%JOB_NUM]:終止指定的作業
當工作中需要同時運行多個進程,提高工作效率,可以這么干
vi all.sh
f1.sh&
f2.sh&
f3.sh&
(f1.sh&);(f2.sh&);(f3.sh&)
{ f1.sh& f2.sh& f3.sh& }
2.進程優先級調整
進程是存在優先級的,所謂優先級是指被執行的順序,優先級越高,被執行的順序越靠前,反之,越靠后
靜態優先級:100-139
進程默認啟動時的nice值為0,優先級為120
只有根用戶才能降低nice值(提高優先性)
進程優先級的調整方法
nice命令
命令格式:nice [OPTION] [COMMAND [ARG]…] (程序未啟動時)
nice -n -10 pid
renice
命令格式:renice [-n] priority [[-p] pid …] [[-g] pgrp …] [[-u] user …]
renice –n -10 pid (進程已經運行)
原創文章,作者:fszxxxks,如若轉載,請注明出處:http://www.www58058.com/44777