程序管理的操作指令
為了管理這些linux程序,使用者應該能夠:
檢視所有運作中的程序
檢視程序消耗資源
定位個别程序并且對其執行指定操作
改變程序的優先級
殺死指定程序
限制程序可用的系統資源等
linux提供了許多指令來讓使用者來高效掌控上述的操作;
1.pstree - 顯示程序的樹狀圖來展示程序間關系
linux中,每一個程序都是由其父程序建立的。此指令以可視化方式顯示程序,通過顯示程序的樹狀 圖來展示程序間關系。如果指定了pid了,那麼樹的根是該pid,不然将會是init(pid: 1)。

2.ps -
Linux 中最基礎的浏覽系統中的程序的指令。能列出系統中運作的程序,包括程序号、指令、CPU使用量、記憶體使用量等。下述選項可以得到更多有用的消息。
三種風格的選項options:
UNIX options, which may be grouped and must be preceded by a dash.
BSD options, which may be grouped and must not be used with a dash.
GNU long options, which are preceded by two dashes.
BSD-style
a:顯示所有與終端相關的程序
x:顯示所有與終端無關的程序
u:顯示發起程序的使用者的名稱
常用三者組合,aux
顯示結果:
其顯示的結果各字段的含義:
USER:程序所有者
PID:程序辨別符
%CPU:程序所占CPU處理時間的百分比
%MEM:程序占用記憶體百分比
VSZ:虛拟記憶體集(可交換記憶體集)
RSS:常駐記憶體集
TTY:程序與哪個終端相關,辨別與終端無關
STAT:程序的狀态,如下:
R:running正在運作的程序;
S:interuptible sleep,可中斷睡眠狀态;
D:uninteruptible sleep,不可中斷睡眠狀态;Disk Block;
T:Trace/STOPPED:被跟蹤/已停止
Z:Zombie,僵死态 父程序已消失
+: 表示是一個前台程序;
l:包含多線程的程序
<: 高優先級程序
N:低優先級程序
s:Session leader 有子程序的父程序;
START:程序開始執行時的時間戳
TIME:程序累計的cpu占用時間;
COMMAND:啟動程序的指令行參數
UNIX風格的選項:
-e:顯示所有程序
-f:顯示完整格式的程序資訊
-F:與-f幾乎相同
常用選項組合:-ef
其結果如下:
雖然跟ps aux所顯示的結果類似,但也有不同之處:
PPID:父程序的pid
C:程序占用的CPU時間百分比
3.pgrep, pkill - look up or signal processes based on name and other attributes
根據程序名稱或者其他屬性檢視程序或向程序發送信号
pgrep [opts] pattern
常用選項:
-u uid:顯示程序的有效使用者
-U uid:顯示程序的真實使用者
-t TERM:顯示與指定終端相關的程序
-l:顯示程序名稱和PID
-a:顯示程序的完整參數
4.pidof -- find the process ID of a running program。
顯示指定程序的PID
5.top - display Linux processes
這個指令顯示的内容還是畢竟詳盡的:
首先是top的首部:
top - 16:47:00 up 7:53, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 393 total, 1 running, 392 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1001360 total, 542116 free, 201176 used, 258068 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 599600 avail Mem
第一行:uptime資訊
目前系統時間 系統運作時長 目前登入系統的使用者總數 過去的1,5,15分鐘三個時間段的在CPU上等待運作的程序隊列的平均長度
第二行:系統中運作的程序總數 正在運作的 睡眠狀态的 已停止的 僵死态的
第三行:CPU的占用百分比
us:user space 使用者空間的程序占用的cpu時間的百分比
sy:system 核心空間的核心程序占用的cpu時間百分比
ni:使用nice值調整了程序優先級之後,額外多占用的cpu時間的百分比
id:idle,cpu空閑時間的百分比,一般為10-20%;
wa:waiting,等待IO完成所消耗的CPU時間的百分比
hi:hardware interrupting,處理硬體中斷事件所消耗的CPU時間的百分比
si:software interrupting,處理軟體中斷事件所消耗的CPU時間的百分比
st:stolen,被虛拟化程式等偷走的cpu時間的百分比
第四行:以KB為機關顯示實體記憶體空間的使用情況
total:實體記憶體的總大小
free:空閑的實體記憶體空間大小
used:已經被使用的實體記憶體空間大小
buff/cache:緩沖區和緩存區所消耗的實體記憶體大小;随時可以回收
第五行:以KB為機關顯示交換分區SWAP空間的使用情況
'total' 'used' 'free' 'avail Mem'
首部之後的内容 就類似與ps aux了
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top是前台程序,具有互動式指令如下:
1 顯示/隐藏CPU核心資訊
P 根據CPU占用百分比排序
M 根據實體記憶體占用百分比進行排序
T 根據累計CPU占用時間進行排序
l 關閉/顯示uptime資訊
t 關閉/顯示第二三行資訊
m 關閉/顯示第四五行資訊
q 退出top互動模式
s 修改top的重新整理時間間隔
k 終止指定PID的程序
常用選項:
-d #:相當于互動模式裡的s,指定重新整理的時間間隔;預設3.0s
-b:按照批次顯示程序資訊
-n #:與-b一起使用,辨別顯示多少批次
6.vmstat - 報告虛拟記憶體的統計資訊
用法:vmstat [options] [delay [count]]
options:
-s 統計記憶體使用的相關資訊 /proc/meminfo檔案中提取的資訊;
delay:按照預設是s為時間,重複執行這個指令
count:指定要執行vmstat的次數
輸出資訊的格式如下:
各字段含義如下:
procs
r running運作中
b block阻塞态
memory
swpd
free
buff
cache
swap
si swap in 頁框進入swap空間
so swapout swap空間拿出去到頁框
io
bi blockin 加載到記憶體過程
bo blockout 記憶體儲存資料到塊裝置
system
in interrupt 中斷
cs 上下文切換
cpu
us userspace
sy
id idle
wa waiting
st stolen
7.pmap - report memory map of a process 程序映射表
用法:pmap [options] pid [...] 參考/proc/DIGIT(pid)/maps
要修改proc目錄下PID目錄下的檔案 不能用vim,而是echo > 重定向的方式
options:-x,--extended : 顯示一些擴充資訊,如RSS Dirty;
8.htop,glances dstat
htop - 增強版top,個人認為格式比top更美觀
用法:htop [-dChusv]
選項:
-d #:htop重新整理的時間間隔
-u USERNAME:顯示指定使用者的程序
-s COLUME_NAME:根據指定字段進行排序
互動式指令:
l:顯示指定程序打開的檔案清單
t/F5:顯示程序樹結構
a:標明的程序綁定到某指定的CPU核;
glances - A cross-platform curses-based monitoring tool
用法:glances [-bdhmn1] [-t refresh] [-f file] [-o output]
常用選項:
-b:K Byte為機關,顯示網卡的資料速率
-d 關閉磁盤的IO子產品
-m 關閉Mount子產品
-n 關閉Network子產品
-1 單獨顯示每顆CPU核心的資料統計資訊
-t # 設定重新整理時間間隔
-o {HTML|CSV} 為輸出資料指定輸出的格式
-f /PATH/TO/OUTPUT_DIR 指定輸出檔案的路徑,預設輸出檔案名為glances.html或者glances.csv
此指令 可以工作于C/S模式下;
S:伺服器模式
glances -s -B IPADDR
這裡的IPADDR是伺服器本地的某個IP位址;
C:用戶端模式
glances -c IPADDR
這裡的IPADDR是遠端伺服器指定監聽的IP位址
程序之間是可以通信的,但是不能随意通信;linux核心管理程序方式--單獨管理;
IPC--Inter-Process Communication
1.signal
2.semaphore
3.shared memory(SHM)共享記憶體
4.socket
dstat:
用法:dstat [-afv] [options..] [delay [count]]
常用選項:
-c --cpu
-d --disk
-n --net
-g --paging
-y --sys
以上五個為預設選項
--tcp
--udp
“殺死”終止程序的指令 -- kill pkill kilall
1.kill - teminate a process
用法 kill [-s signal] pid..
檢視信号signal的資訊: kill -l
有效信号的辨別方法
1.使用數字編碼
2.完整名稱
3.簡寫名稱,即不包含‘SIG’的其餘部分
常用信号:
1)SIGHUP 無需關閉對應程序而讓其重新選取自身的配置檔案
2)SIGINT 一般用于終止正在運作的前台程序 相當于Ctrl+C
9)SIGKILL 沒有任何預兆的終止正在運作的程序,'殘暴值'五顆星!
15)SIGTERM 預設信号,終止正在運作的程序,但允許程序'料理後事'
18)SIGCONT 讓轉入背景的程序繼續運作
19)SIGSTOP 讓程序轉入背景并停止運作
2.killall - kill processes by name
用法:killall PRO_NAME
3.pkill -
根據模式比對(PATTERN)來進行終止程序;可能會誤終止其他程序
程序作業管理指令:
jobs,bg,fg
前面介紹到,程序有前台程序和背景程序,那麼如何讓作業工作與背景?
1.對于正在運作的前台作業:Ctrl+z
注意:實際上是向此程序發送了19号信号,轉入背景後即停止運作
2.對于尚未啟動的作業,使其啟動并轉入背景:
# COMMAND &
注意:此類作業是從前台啟動,但是啟動後立即轉入背景,但即便如此,此程序也是與終端相 關聯的程序;如果終端關閉,則此類程序也會終止;
3.對于尚未啟動的作業,使其啟動并轉入背景,且同時解除與終端的關聯
# nohup COMMAND &
檢視背景作業:
jobs
将背景作業轉入前台運作
fg [JOB_ID]
使背景作業在背景運作:
bg [JOB_ID]
終止背景作業:
kill %JOB_ID
kill %1
調整程序優先級的指令
nice - run a program with modified scheduling priority
用法:nice [OPTION] [COMMAND [ARG]...]
選項 -n NICE:指定nice值 預設為10
renice - alter priority of running processes
用法:renice [-n] priority pid...