第四章 更多bash shell命令一
Key words : 進程查看 :ps top 監控磁盤空間:mount、df、du 操作數據文件 sort grep Linux文件壓縮工具:bzip2 compresse gzip zip
4.1.1進程查看
ps 默認情況下只顯示屬于當前用戶正在當前終端中運行的程序
[root@localhost ~]# ps
PID TTY TIME CMD
4026 pts/0 00:00:00 bash
4793 pts/0 00:00:00 ps
ps本身提供的信息很少,但它有很多參數,可以實現強大的功能
linux中使用的GNU ps命令支持3種不同的命令行參數:
1、Unix類型參數,前面有一短劃線
2、BSD類型參數,前面沒有短劃線
3、GNU長參數,前面有雙短劃線
unix類型常用參數:
ps -e/A 顯示所有進程
-f 顯示完整的格式列表
-l 顯示長列表
ps -ef 是最常用最有用的
例:
[root@localhost ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 20:35 ? 00:00:07 init [5]
root 2 1 0 20:35 ? 00:00:00 [migration/0]
root 3 1 0 20:35 ? 00:00:00 [ksoftirqd/0]
root 4 1 0 20:35 ? 00:00:00 [watchdog/0]
root 5 1 0 20:35 ? 00:00:00 [migration/1]
root 6 1 0 20:35 ? 00:00:00 [ksoftirqd/1]
root 7 1 0 20:35 ? 00:00:00 [watchdog/1]
。。。。。。
UID :負責啟動進程的用戶
PID :進程ID
PPID:父進程ID
C :進程存續期的處理器利用率
STIME :進程啟動時的系統時間
TTY:進程從中啟動的終端
TIME:運行進程所需的累積CPU時間
CMD:啟動程序的名稱
[root@localhost ~]# ps -el 若希望查看更多的信息,可以l參數
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 78 0 - 518 - ? 00:00:07 init
1 S 0 2 1 0 -40 - - 0 migrat ? 00:00:00 migration/0
1 S 0 3 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/0
5 S 0 4 1 0 -40 - - 0 watchd ? 00:00:00 watchdog/0
1 S 0 5 1 0 -40 - - 0 migrat ? 00:00:00 migration/1
1 S 0 6 1 0 94 19 - 0 ksofti ? 00:00:00 ksoftirqd/1
5 S 0 7 1 0 -40 - - 0 watchd ? 00:00:00 watchdog/1
F:內核分配給進程的系統標記
s :進程的狀態(O=在處理器上運行; S=睡眠 ; R=可運行,等待運行 ; Z=死進程,進程以
終止但父進程不可用 ; T=進程已停止)
PRI:進程的優先級,數字越大優先級越低
NI :nice value 用于判斷優先級
ADDR:進程的內存地址
SZ:換出進程大致需要的交換空間
WCHAN:進程睡眠時所在的內核函數的地址
BSD類型參數:
與Unix類型參數有許多相同之處,最常用的是l 參數
[root@localhost ~]# ps l
F UID PID PPID PRI NI VSZ RSS WCHAN STAT TTY TIME COMMAND
4 0 3483 1 17 0 1664 452 - Ss+ tty1 0:00 /sbin/mingetty t
4 0 3484 1 18 0 1664 452 - Ss+ tty2 0:00 /sbin/mingetty t
4 0 3485 1 18 0 1664 448 - Ss+ tty3 0:00 /sbin/mingetty t
4 0 3486 1 19 0 1664 448 - Ss+ tty4 0:00 /sbin/mingetty t
4 0 3487 1 20 0 1664 448 - Ss+ tty5 0:00 /sbin/mingetty t
4 0 3488 1 21 0 1664 452 - Ss+ tty6 0:00 /sbin/mingetty t
4 0 3590 3586 15 0 18372 10400 - Rs+ tty7 0:29 /usr/bin/Xorg :0
0 0 4026 4022 15 0 4912 1520 wait Ss pts/0 0:00 bash
4 0 6055 4026 17 0 4456 844 - R+ pts/0 0:00 ps l
不同的地方是
VSZ :進程在內存中的大小,以KB為單位
RSS:進程使用過且未被換成的物理內存
STAT:由兩個字符組成的狀態碼,表示當前進程的狀態,第一個字符與Unix類型的S輸出列的值相同
,第二個字符進一步定義進程的狀態:
< : 進程正以高優先級運行
N :進程正以低優先級運行
L:進程在內存中存在鎖定頁面
s:進程是會話的領導者
l:進程是多線程的
+:進程正在前臺運行
4.1.2實時進程監控
ps只能顯示特定時間點的信息,而top命令可以實時顯示進程信息,例如在內存中換進換出的進程趨
勢、負載值等。
[root@localhost ~]# top
top - 22:32:40 up 1:57, 2 users, load average: 0.07, 0.02, 0.00
Tasks: 95 total, 2 running, 93 sleeping, 0 stopped, 0 zombie
Cpu(s): 3.1%us, 2.9%sy, 0.0%ni, 93.8%id, 0.0%wa, 0.1%hi, 0.0%si, 0.0%st
Mem: 1035064k total, 331236k used, 703828k free, 87928k buffers
Swap: 2097144k total, 0k used, 2097144k free, 145676k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3590 root 15 0 35356 9.9m 5820 S 7.1 1.0 0:36.91 Xorg
4022 root 15 0 100m 17m 10m R 4.1 1.7 0:08.06 gnome-terminal
3733 root 15 0 39848 11m 7664 S 0.3 1.1 0:01.06 metacity
3828 root 15 0 16904 4080 3188 S 0.3 0.4 0:01.71 gnome-screensav
6867 root 18 0 2300 1080 836 R 0.3 0.1 0:00.14 top
1 root 18 0 2072 660 568 S 0.0 0.1 0:07.19 init
2 root RT -5 0 0 0 S 0.0 0.0 0:00.35 migration/0
3 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
4 root RT -5 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
。。。。。。
第一行:當前時間 系統已正常運行的時間 登錄的用戶數量 系統平均負載
平均負載包括三個值,分別是1分鐘平均負載、5分鐘平均負載、15分鐘平均負載。值越高則系統負
載越大,短期活動使1分鐘平均負載值沖高是常見的,但是15分鐘平均負載值處于高位則表示系統可能
遇到了麻煩。平均負載值依賴于在系統的硬件配置和其中運行的程序,這個值對不同的系統有不同的影
響,但一般來說,如果平均負載值高于2則表示系統趨于繁忙。
第二行:一般進程信息:有多少進程在運行、睡眠、已停止、僵死(已經運行完畢,但父進程未響應)
第三行:CPU的一般信息
第四第五行:系統內存狀態
剩下的信息跟PS命令的輸出相似。
默認情況下,top會根據%CPU的值對程序進行排序,但可以在top運行其中按下互交式命令改變
程序行為
b 啟用表中重要數據用粗體顯示
z 顯示顏色
l 在單個CPU與symmetric Muutiprocessor(SMP)狀態之間切換
F 選擇對進程進行排序的字段
m 切換MEM和SWAP信息行顯示
k 殺死特定進程
q 退出top命令
d/s 更改更新時間(默認為3秒)
u 顯示特定用戶的進程
w 將當前設置寫入配置文件
。。。。。。
4.1.3停止進程——需要root用戶或進程所有者
Linux沿用了Unix中的進程間通信方法,在Linux中,各種進程使用信號相互通信,進程信號是進程可
以識別的預定義信息,進程可以選擇忽略它或作出響應,大多數精心編寫的應用程序都能接收標準Unix
進程信號,并對此作出響應。
Linux進程信號:
信號
|
名稱
|
描述
|
1
|
HUP
|
掛起
|
2
|
INT
|
中斷
|
3
|
QUIT
|
停止運行
|
9
|
KILL
|
強制終止
|
11
|
SEGV
|
段違例
|
15
|
TERM
|
條件終止
|
17
|
STOP
|
強制停止但未終止
|
18
|
TSTP
|
停止或暫停,但仍繼續在后臺運行
|
19
|
CONT
|
STOP或TSTP之后恢復執行
|
kill 和killall 命令可以向運行中的進程發送進程信號
kill 命令根據PID將信號發送給相關進程,默認情況下kill命令向進程發送TERM(15)信號友好地通知
進程停止運行,但當進程失控時很可能忽略該請求。當需要執行強制措施時可以通過使用參數-s 來指定
其他信號(名稱或信號編號)
例:
[root@localhost ~]# kill 4302
[root@localhost ~]# kill -s 9 4302
[root@localhost ~]# kill -2 4532
[root@localhost ~]# kill QUIT 4597
killall可以根據進程名稱來停止進程,還允許使用通配符,對處理出錯的系統非常有用。但使用時務必小心,否則很容易導致意外停止重要的系統進程,使文件系統受損。
[root@localhost ~]# killall gnome-terminal