Linux進程和作業管理
=================================================================
內核的功能:進程管理(進程調用,保存現場,恢復現場)、文件系統、網絡功能、驅動功能、安全功能
process:運行中的程序的一個副本:
存在生命周期
linux內核存儲進程信息的固定格式:task struct(任務結構)
多個任務的task struct組件的鏈表:task list(任務列表)
進程創建:
init進程是由內核創建,其余的進程都有父進程創建。
進程優先級:
0-139:
1-99:實時優先級
100-139:靜態優先級
**數字越小,優先級越高**
nice值:-20,19
進程類型:
守護進程:daemon:在系統引導過程中啟動進程,跟終端無關的進程
交互式進程(前台進程):跟終端有關,通過終端啟動的進程
**注意:也可以把前台啟動的進程送往後台,以守護模式運行
進程狀態:
運行態:runing
就緒態:ready
睡眠態:
可中斷:interruptable
不可中斷:uninterruptable
停止態:暫停於內存中,但不會被調度,除非手動啟動之:stopped
僵死態:zombie
進程的分類:
cpu-bound
IO-bound
推薦書籍:《Linux內核設計與實現》、《深入理解Linux內核》
啟動進程的方式:
系統自啟動,與終端無關;用戶通過終端啟動,與終端相關的進程。
=================================================================
進程管理***
Linux系統上的進程查看及管理工具:pstree、ps、pldof、pgrep、top、htop、glances、pmap、vmstat、dstat、kill、job、bg、jg、nohup、nice、renice、killall...
-----------------------------------------------------------------
pstree命令:
display a tree of processes
centos6所有進程的父進程是init。centos7所有進程的父進程是syetemd。
pstree -p 查看進程樹並顯示pid
pstree -u 查看進程樹並顯示用戶
-----------------------------------------------------------------
ps命令:
report a snapshot of the current processes.當前進程的快照
###/proc/:內核中的狀態信息:
內核參數:
可設置其值從而調整內核運行特性的參數:/proc/sys/
狀態變量:其用於輸出內核中統計信息或狀態信息,僅用於查看###
ps [options]
選項三種風格:
1 UNIX options, which may be grouped and must be
preceded by a dash.
2 BSD options, which may be grouped and must not be
used with a dash.
3 GNU long options, which are preceded by two dashes.
選項:
a:所有與終端相關的進程
x:所有不與終端相關的進程
[kthreadd]==>>[]表示內核進程。pstree是看不到[]
u:以用戶為中心
user 進程用戶
pid 進程的標識號
%CPU cpu使用率
%MEM 內存的使用率
VSZ 虛擬內存使用量。虛擬內存集
RSS 物理內存使用量。常駐內存集
TTY 控制台
STAT 進程狀態:
r 運行,S:可中斷睡眠,D:不可中斷睡眠,T:停止,z:僵死,+:前台進程,l:多線程,N:低優先級進程,<:高優先進程,s:會話引導
START 開啟進程的時間
TIME 占用cpu的時間
COMMAND 終端上進程的名稱
-e:顯示所有進程
-f:
常用組合三:-ef組合: C cpu占用百分比
STIME 啟動時間
TIME 累積使用時間
CMD 啟動此進程的命令
-F: 顯示完整格式的進程信息。
PSR :運行在那顆cpu之上
-H:以層級結構顯示進程信息
常用組合:-eFH,-eo axo **o一定寫在後面!
o file file...自定義顯示的字級列,以逗號分隔
常用的file:pid ni pri pcpu stat comm tty ppid rtprio
ni:nice值
pri:priority(進程)優先級
rtprio:real time priority,實時優先級
-----------------------------------------------------------------
pgrep pkill命令
look up or signal processes based on name and other
attributes=查找或基於名稱和其他的信號處理屬性
-u uid:
-U 顯示指定用戶的進程
-t 顯示指定的終端的進程
-l 顯示進程名
-a 顯示完整格式的進行名
-P 顯示此進程的子進程
-----------------------------------------------------------------
pidof 命令
根據進程名,取其pid
ex:
# pidof 進程名稱
-----------------------------------------------------------------
top命令
uptime:顯示系統時間,運行時長及平均負載==就是top命令輸出的第一行
平均負載:過去的1分鐘,5分鐘,15分鐘的平均負載
顯示的cpu信息解釋:
Cpu(s): 0.3%us, 0.3%sy, 0.0%ni, 99.0%id, 0.0%wa, 0.0%hi, 0.3%s
Cpu(s): cpu占用百分比
0.3%us, 用戶進程所占用cpu的百分比
0.3%sy, 內核空間的內核所占用cpu百分比
0.0%ni, nice調整以後所占用的u百分比
99.0%id, 空閒百分比
0.0%wa, 等待io完成所消耗的百分比
0.0%hi, 處理硬件中斷所占據的百分比
0.3%si, 處理軟件件中斷所占據的百分比
0.0%st, 被虛擬化程序所分走的百分比
排序:
P 以占據cpu的百分比排序
M 以占據內存百分比排序
T 累積占用cpu時間排序
************
top在執行過程中可以使用的按鍵命令
? 顯示可以輸入的命令
P 按照cpu使用率排序
M 按照內存使用率排序
N 按照pid來排序
T 按照cpu時間積累排序
k 殺死指定pid對應的進程
r 給予某個pid重新制定一個nice值
r pid nice值
q 退出
> 翻頁
< 翻頁
************
首部信息:uptime信息:l命令,tasks命令及cpu信息:t命令,內存信息:m命令
退出命令:q,修改刷新時間:s,終止指定的進程:k
-d #:指定刷新時間間隔,默認是3秒
-b:以批次方式顯示
-n#:顯示多少批次
top -u root //指定某人發起的所有進程
top -p 1 //查看pid為1所對應的進程狀態
-----------------------------------------------------------------
htop命令
此命令要單獨安裝。 ***擴展:安裝軟件的中良好途徑:epel***
-d #:指定延遲書劍
-u userName :僅顯示指定用戶的進程
-s colume:以指定字段進行排序
子命令:
l:顯示選定
s:跟蹤選定的進程的系統調用
t:以層級關系顯示各進程狀態
a:將選定的進程綁定至某指定的cpu核心
-----------------------------------------------------------------
vmstat命令
Report virtual memory statistics(報告虛擬內存統計)
vmstat [options][delay [ count]]
術語解釋:
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 1394972 76056 312680 0 0 3 6 13 11 0 0 100 0 0
procs:
r:等待運行的進程個數;cpu上等待運行的任務的對列長度。
b:處於不可中斷睡眠態的進程個數;被阻塞任務隊列的長度。
memory:
swpd:交換內存使用總量
free:空閒的物理內存容量
buff:用於buff的內存總量(緩沖)
cache:用於cache的內存總量(緩存)
swap
si (swapin) 數據進入swap中的速率(kb/s)
so (swapout)數據離開swap的速率(kb/s)
io
bi (blockin) 從塊設備讀入數據到系統的速率(kb/s)
bo (blockout) 保存塊設備數據的速率(kb/s)
system
in (interrupts)中斷速率
cs (context switch)上下文切換的速率
cpu
us user space
sy system
id idle
wa wait
st stolen
選項:-s
-----------------------------------------------------------------
pmap命令
report memory map of a process(報告內存映射表)
pmap [ -x | -d ] [ -q ] pids...
-x:顯示詳細格式的信息
另一種查看方式:
[root@zyl htop-1.0.2]# cat /proc/1/maps
-----------------------------------------------------------------
glances命令
-An eye on your system
具體安裝過程可見博文glances安裝。
可以監控本機也可以通過客戶端服務器模式監控其他機器。
glances [OPTIONS]
常用選項:
-b:以byte為單位顯示網上數據速率
-d:關閉磁盤i/o
-m:關閉mount模塊
-n:關閉network模塊
-t #:刷新時間間隔
-l:每個cpu的相關數據單獨顯示
-o:{HTML|CSV}:輸出格式
-f:/PATH/TO/SOMEDIR:設定輸出文件的位置
c/s模式下運行glances命令:
服務模式:
glances -s -B IPADDR(本機的某地址,用於監聽)
-s service。-B IP地址
客戶端模式:
lances -c IPADDR
-c client
-----------------------------------------------------------------
dstat命令
versatile tool for generati systeresourcestatistics(用於生成系統資源的多功能工具統計)
常用參數:
-c 只顯示cpu信息
-C 1 2 ..
-d --disk 顯示磁盤相關的信息
-D sda sdb ..
-g 顯示page相關的速率信息
-m 顯示內存的信息
-n interface相關的信息
-p 顯示process的相關統計數據
-r 心事io需求的相關統計數據
-s 顯示swapped的相關統計數據
--tcp --udp --raw --socket --ipc
--top-cpu顯示最占用cpu的進程
--top-io最占用io的進程
--top-mem最占用內存的進程
--top-lantency 延遲最大的進程
-----------------------------------------------------------------
kill 命令
terminate a process(終止一個進程):用於向進程發送信號,以實現進程的管理:
顯示系統當前的信號:kill -l signal
每種信號的標識方法有三種:
1.信號的數字標識
2.信號的完整名稱
3.信號的簡寫名稱
向進程發送信號:
kill [-s signal|-p] [--] pid...
常用的信號:
1) SIGHUP :無需關閉進程而讓其重置配置文件
2) SIGINT :終止正在運行的進程,相當於ctrl +c
9) SIGKILL : 殺死運行中的進程,強制殺死
15) SIGTER: 終止正在運行的進程,正常殺死
18) SIGCONT :進程繼續
19) SIGSTOP: 進程停止 相當於ctrl + z,jb
-----------------------------------------------------------------
killall 命令
kill processes by name
常用用法:
killall [-signal ] program(程序)
=================================================================
作業管理***
job:
前台作業(foregroup):通過終端啟動,且啟動後一直占據終端
後台作業(backgroup):通過終端啟動,但啟動後即轉入後台運行(釋放終端)
如何讓作業運行在後台?
1.運行中的作業
ctrl+Z
注意:送往後台,作業會轉為停止態
2.尚未啟動的作業
COMMAND &
注意:此類作業雖然被送往後台,但是其依然與終端有相關,如果終端停止,此類作業也停止。如果希望把送往後台的作業且脫離終端的關系(用下面的命令):
nohup COMMAND & :運行於後台且脫離終端模式
-----------------------------------------------------------------
查看所有的作業:
jobs
如:
[root@zyl /]# jobs
[1]+ Stopped vim a.txt [1]:作業號
-----------------------------------------------------------------
可實現作業控制的常用命令:
fg [%jobnumber] :指定的作業掉回前台
bg [%jobnumber] :讓送往後台的作業繼續運行
kill [%jobnumber] ==%不能取消。:終止指定的作業
-----------------------------------------------------------------
調整進程的優先級:
可通過nice值調整的優先級:100~139
分別對應於:-20,19
進程啟動時,其nice值默認為0,其優先級120
-----------------------------------------------------------------
nice命令
以指定的nice值並運行命令(開啟進程的時候指定的nice值)
nice [OPTION] [COMMAND [ARG]...]
-n nice
注意:只有管理員可調低nice值
-----------------------------------------------------------------
renice命令
修改進程的nice
renice {-n} nice pid
ex:
renice 10 13054 將nice修改為10
renice -10 16604 將nice修改為-10
-----------------------------------------------------------------
查看nice值和優先級
ps axo pid,ni,common,prioritiy
-----------------------------------------------------------------
為涉及的命令:sar ...
-----------------------------------------------------------------
總結命令:htop dsata top ps
=================================================================
網絡客戶端工具:
ping ftp lftp get hping traceroute lftp
ping命令: send ICMP ECHO_REQUEST to network hosts
icmp:互聯網消息控制協議:internet control message protocol
-c (count)ping包個數
-w ping命令的超時時長
-W 一次ping操作中, 等待對方響應的時長
-s 指明ping包的大小。默認是64byte
-----------------------------------------------------------------
hping命令 系統默認不安裝
--fast
--fasts
--flood
-----------------------------------------------------------------
traceroute命令
跟蹤從當前主機到目標主機之間經過的網關(路由設備)
-----------------------------------------------------------------
ftp命令
文件傳輸協議
基於ftp協議訪問ftp服務命令行客戶端工具
如下:
[root@zyl ~]# ftp [email protected]
-----------------------------------------------------------------
lftp命令
Sophisticated(精致的) file transfer program
用來取代ftp命令:
口令:
[root@zyl ~]# lftp -u ftp 192.168.21.128
口令:
lftp [email protected]:~> help
不用口令:
[root@zyl ~]# lftp -u ftp,ftp 192.168.21.128
lftp [email protected]:~>help
***支持tab自動補全***
-----------------------------------------------------------------
lftpget命令
get a file with lftp(1) 直接下載
-c:繼續此前的下載
-----------------------------------------------------------------
wget命令
下載工具
wget [option]... [URL]...
-b 在後台執行下載操作
-d 靜默模式,不顯示進度
-o 下載的文件的保存路徑
--limit-rate=amount 以指定的速率下載
=================================================================
本文出自 “randolph” 博客,轉載請與作者聯系!