Linux--進程管理
1.什麽是進程:
簡單的說,進程是程序的執行實例,即運行中的程序,同時也是程序的一個副本;程序是放置於磁盤的,而進程是位於內存中的。
2.進程的分類:
(1)按照進程的啟動方式:
守護進程:
Daemon:通常是在系統引導的時候被啟動的,與任何的終端控制臺無關,也可以通過終端啟動
用戶進程:
用戶登錄到系統後,通過終端啟動的進程
(2)按照進程的運行位置:
前臺進程:
在啟動進程後,進程一直占有標準輸出,或者標準輸入,或者同時占用標準輸入和標準輸出
後臺進程:
在進程啟動之後,不占有標準輸入和標準輸出的進程
(3)按照進程對於資源消耗:
CPU-Bond:
非交互式的進程,
IO-Bond:
編輯器等各種交互式
3.進程的優先級:
0-139一共分為140個等級
0保留
1-99:實時優先級,數字越大優先級越高,在系統啟動時啟動的進程
100-139:靜態優先級,數字越小,優先級越高,在用戶執行某些應用程序的時候,啟動的進程
nice值:-20到19,共40個,默認nice值為0,只有管理員才能使用負數的值,以提升進程的優先級,普通用戶只能使用正整數的nice值,以降低進程的優先級
4.Linux系統上與進程有關的命令(查看命令和管理命令)
pstree,ps,pidof,pgrep,pkill,top,htop,glances,dstat,pmap,vmstat,bg,fg,jobs,kill,killall,nohup,nice,renice,...
ps [options]:
常用選項:
BSD風格的選項:
a :顯示所有與終端相關的進程
x :顯示所有與終端無關的選項
u :顯示發起進程的用戶賬戶名稱的UID
常用選項組合:axu
ps aux命令的結果中各字段的含義:
[[email protected] ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:進程的所有者
PID:進程的標識符
%CPU:進程占用的CPU處理時間的百分比
%MEM :進程占用的物理內存的百分比
VSZ:虛擬內存集(可交換內存集)
RSS :常駐內存集
TTY:進程與哪個終端相關,其中?表示與終端無關
STAT:
R:running 正在運行的進程
S:interuptible sleeping可中斷的睡眠狀態
D:uninteruptible sleeping 不可中斷的睡眠狀態,Disk Block
T:Trace/STOPPED,被跟蹤/已停止
Z:Zombie,僵死態
+:前臺進程
l:進程中可能包含多線程
<:表示高優先級進程
N:低優先級進程
s:session leader,有子進程的父進程
START:進程開始執行的時候的時間戳
TIME:進程累積占用CPU的時間
COMMAND:啟動進程的命令行的參數
UNIX風格的選項:
-e:顯示所有進程
-f:顯示完整格式的進程信息
-F:顯示完整格式的進程信息,與-f幾乎相同
常用選項組合之二:-ef
PPID:父進程PID
C:表示進程占用CPU時間的百分比
常用選項組合之三:-sF
SZ:虛擬內存集
RSS:常駐內存集
PSR:表示此進程在哪個CPU核心上運行
-M:以層級機構顯示進程的父子關系
常用選項組合之四:-eFH
o|-o:字段1,字段2....以自定義字段方式顯示進程相關的信息
字段:pid,ppid,ni,rtprio,psr,pcpu,stat,comm,user,tty,vsz,rss,...
常用選項組合之五:-eo | axo 字段1,字段2....
pgrep,pkill:
根據進程名稱或者其他屬性查看進程或者向進程發送信號。
pgrep [options] pattern
pkill [options] pattern
常用選項:
-u uid:顯示進程的有效用戶
-U uid:顯示進程的真實用戶
-t TERM:顯示與終端相關的進程
-l:顯示進程名稱
-a:顯示進程的完整的命令行參數
top:
顯示linux進程
top首部:
第一行:uptime信息:
當前系統時間
系統運行時長
當前登錄系統的用戶總數
過去的1分鐘,5分鐘,15分鐘的在CPU上等待運行的進程隊列的平均長度
第二行:
系統中運行的進程總數
正在運行的進程數
處於睡眠狀態的進程數
已停止的進程數
僵死態的進程數
第三行:CPU時間占用百分比
us:user space 用戶空間的進程占用的CPU時間的百分比
sy:system 內核空間的內核進程占用的CPU時間的百分比
ni:nice 使用nice調整了進程的優先級之後額外多占用的CPU時間的百分比
id:idle CPU空閑時間的百分比
wa:waiting 等待IO完成所消耗的CPU時間的百分比
hi:hardware interupting 處理硬件中斷事件所消耗的CPU時間的百分比
si:software interupting 處理軟件中斷事件所消耗的CPU時間的百分比
st:stolen 被虛擬化程序偷走的CUP時間的百分比
第四行:以KB為單位顯示物理內存空間的使用情況
total:物理內存空間的總大小
free:空閑的物理內存空間大小
userd:已經被使用的物理內存空間大小
buffer/cache:緩沖區和緩存區消耗的物理內存空間大小,這段內存空間隨時可以回收,不算真正的消耗
avail men:真正可用的內存空間大小
第五行:以KB為單位顯示與交換分區swap空間的使用情況
total
free
used
交互式命令:
1:顯示或隱藏CPU核心信息
P:根據CPU占用百分比進行排序
M:根據物理內存占用百分比進行排序
T:根據累計CPU占用時間進行排序
l:關閉或顯示uptime信息
t:關閉或顯示第二,第三行信息
m:關閉或顯示第四,第五行信息
q:退出top交互模式
s:修改top的刷新時間間隔
k:終止某個指定PID的進程的運行
常用選項:
-d #:指定top刷新的時間間隔,默認是3秒
-b:按批次顯示進程信息
-n #:通常與-b選項一起使用,表示顯示多少批次
vmstat
報告虛擬內存的統計信息
vmstat [options] [delay [count]]
delay:按照delay所指示的時間重復執行vmstat命令,默認單位是秒
count:重復執行vmstat命令的次數
Procs
r: The number of runnable processes (running or waiting for run time).
b: The number of processes in uninterruptible sleep.
Memory
swpd: the amount of virtual memory used.
free: the amount of idle memory.
buff: the amount of memory used as buffers.
cache: the amount of memory used as cache.
inact: the amount of inactive memory. (-a option)
active: the amount of active memory. (-a option)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
選項:
-s 從/proc/meminfo文件中抽取的信息並加工後輸出
pmap
顯示一個進程的內存映射表
pmap [options] PID [PID ...]
選項:
-x, --extended:展示擴展信息
htop
交互式的進程查看器
htop [-dChusv]
常用選項:
-d #:htop刷新的間隔時間
-u USERNAME:顯示指定用戶的進程
-s 字段的名稱(COLLME_NAME):
交互式命令:
l:顯示指定進程打開的文件列表
t F5 :顯示進程樹結構,以顯示進程之間的父子關系
a:將選定的進程綁定到某指定的CPU核心運行
glances
一個跨平臺的基於curses-based(內核庫)的監控工具
常用選項:
-b:以kByte為單位顯示網卡的數據速率
-d:關閉磁盤IO的模塊
-m:關閉Mount(掛載信息)的模塊
-n:關閉Network模塊
-1:單獨顯示每顆CPU核心的數據統計信息
-t #:設定刷新時間間隔
-o {HTML|CSV}:為輸出數據指定輸出的格式
-f /PATH/TO/OUTPUT_DIR(目錄名):指定輸出文件的路徑信息
glancses可以工作於C/S模型下:
S:服務器模式
glances -s -B IPADDR
IPADDR:服務器本地的某個IP地址
C:客戶機模式
glances -c IPADDR
IPADDR:遠程服務器指定監聽的IP地址
進程之間可以通信的;IPC,Inter-Process Communication
1.signal
2.semaphore
3.shared memory (SHM)
4.socket
dstat
常用選項:
-c,--cpu:顯示CPU相關的統計信息
-d,--disk:顯示磁盤相關的配置信息
-g,--page:顯示page相關的信息
-n,--net:顯示與Interface相關的信息
-y,--sys:顯示與系統相關的信息
--tcp:顯示與TCP連接狀態相關的信息
--udp:顯示與UDP連接相關的信息
--ipc
--raw
--socket
--top-cpu:顯示最占用CPU資源的進程
--top-io:顯示最占用IO的進程
進程管理類:
kill:
終止一個進程
kill [-s signal|-signal] pid...
查看信號的信息:
kill -l [signal]
有效的信號表示方法:
1.使用信號的數字編碼進行表示
2.使用信號的完整名稱進行表示
3.使用信號的簡寫名稱進行表示,簡寫名稱就是完整名稱中不包含SIG的其余部分
常用的信號:
1)SIGHUP:無需關閉對應進程而讓其重新讀取其自身的配置文件
2)SIGIT:終止正在運行的前臺進程
9)SIGKILL:沒有任何預兆的終止正在運行的進程
15)SIGTERM:默認信號,終止正在運行的進程
18)SIGCONT:讓轉入後臺的進程繼續運行
19)SIGSTOP:讓進程轉入後臺並停止運行
killall:
根據名字終止所有進程
# killall PROCESS_NAME
pkill:
根據模式(pattern)進行進程終止,可能會誤傷其他進程
進程作業管理類命令
進程作業:
前臺作業:
foreground job,通過終端啟動,並且啟動後會一直占據終端的進程
後臺作業:
background job,可以通過終端啟動但啟動後立即轉入後臺進行,會釋放終端
如何讓作業工作在後臺:
1.正在運行的前臺作業:
Ctrl+z
註意:實際上是向此進程發送SIGSTOP信號,使得該進程轉入後臺後即停止運行
2.對於尚未啟動的作業使其啟動並轉入後臺:
# COMMAND &
註意:此類作業從前臺啟動,啟動後立即轉入後臺,但即便如此,此進程也是與終端相關的進程,如果終端關閉則此類進程也會終止
3.對於尚未啟動的作業使其啟動並轉入後臺同時剝離其與終端的關聯:
# nohup COMMAND &
查看後臺作業的信息:jobs
將後臺作業轉入前臺工作的命令:fg [JOB_ID(作業編號)]
將後臺作業在後臺運行:bg [JOB_ID]
終止後臺作業:kill %JOB_ID
5.Linux系統的進程調度(任務調度)
進程調度:在未來某個時間點,讓系統自動執行我們事先編寫好的命令或腳本的列表,從而使得即使用戶不在計算機旁邊也可以按時完成任務;為了能夠進行進程調度,就必須要有一種機制能夠識別事件發生的時間並且能夠運行用戶所預期的命令;這種機制在Linux中是通過特定的守護進程來實現的;
這類守護進程包括:
atd:
將預先編寫好的命令在未來某個時間點執行一次;
crond:
將預先編寫好的命令在未來的符合條件的時間點重復執行;
at命令:
at, batch, atq, atrm - queue, examine or delete jobs for later execution
at [option] TIME
TIME:
1.HH:MM [YYYY-mm-dd]
2.noon, midnight, teatime
3.tomorrow
4.now+#UNIT UNIT:min, hours, days, weeks, months, years...
例如:at now+2days at now+5min
at定義的作業有隊列的概念,通常隊列使用單個字母來表示,默認是a;
at -q QUEUE_NAME TIME
選項:
-q QUEUE
-f FILE
-l:查看隊列,相當於atq
-d JOB_ID:清除指定的計劃作業,相當於atrm
-c:查看指定的作業的內容
batch命令:
batch命令在定義任務的時候,無需指定時間,是由系統自行選擇在系統比較空閑的時候,完成此計劃任務;其他的配置與at完全相同;
周期性執行任務計劃:cron
cronie軟件包,提供crond守護進程以及cron的其他管理工具;
cron任務通常分為兩類:
系統cron任務:/etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
註意:
1.
* * * * *:定義周期執行任務的時間
user-name:運行此任務的用戶賬戶身份;
command to be executed:應該執行的任務命令及命令行參數;
註意:為了保證任務能夠準確執行,命令通常是用絕對路徑填寫;
2.各個字段之間使用一個或多個空白字符進行分隔;
3.任務運行的結果以郵件的方式直接發送給root用戶;
用戶cron任務:/var/spool/cron/USERNAME
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
註意:
1.
* * * * *:定義周期執行任務的時間
command to be executed:應該執行的任務命令及命令行參數;
註意:為了保證任務能夠準確執行,命令通常是用絕對路徑填寫;
2.各個字段之間使用一個或多個空白字符進行分隔;
3.任務運行的結果以郵件的方式直接發送給發布任務的用戶;
時間表示法:
1.特定時間:給定時間點的有效取值範圍內的所有有效值;
0 5 3 9 *
2.通配符時間:*,表示"每..."之意,給定時間點的所有有效值;
* * * * *
3.離散時間:在給定的時間點上,使用逗號分隔;
0 8,20 * * 1,3,5
4.連續時間:在給定的時間點上,使用減號分隔;
0 8 * * 1-5
5.步長時間:在給定的時間點上,使用除號分隔;
*/2 * * * *
*/7 * * * * 此種方式無法實現每7分鐘為間隔執行計劃任務;
註意:
1.指定的步長必須能被時間點的數值整除,否則,無意義;
2.最小的時間單位是分鐘,如果計劃以秒為執行計劃任務的時間單位,必須借助於其他機制;
crontab命令:
crontab - maintain crontab files for individual users
crontab [-u user] [-l | -r | -e] [-i]
-u USERNAME:超級用戶為其他用戶設置或編輯用戶cron任務時使用;
-l:查看所有的已經被定義的計劃任務
-e:使用vi編輯器編輯crontab文件;
-r:移除所有的計劃任務;不推薦使用;
-i:在使用-r選項時,進行交互;
本文出自 “12657170” 博客,請務必保留此出處http://12667170.blog.51cto.com/12657170/1950315
Linux--進程管理