Linux內核:搶占式多任務
進程類型:
1、守護進程:在系統引導過程中啟動的進程,與終端無關的進程;
2、前臺進程:跟終端相關,通過終端啟動的進程,注意:也可把前臺啟動的進程送往后臺,以守護模式運行;
進程狀態:
運行態:running
就緒態:ready
睡眠態:a、可中斷:interruptable;b、不可中斷:uninterruptable
停止態:暫停于內存中,但不會被調度,除非手動啟動之:stopped
僵死態:zombie
進程分類:
1、CPU-Bound:CPU密集型
2、IO-Bound:IO密集型
Linux進程查看及管理工具:pstree、ps、pgrep、pidof、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup;
pstree – display a tree of processes;以樹狀顯示進程
ps:顯示進程狀態
ps [options]…
選項:支持兩種風格
常用組合:aux
u:以用戶為中心組織進程狀態信息顯示
a:與終端相關的進程
x:與終端無關的進程
# ps uax
USER ? ? ? PID ? ? ?%CPU ? ? %MEM ? ? VSZ ? ? ? RSS ? ? TTY ? ? ? ?STAT ? ? ?START ? ? ? ? TIME ? ? ? COMMAND
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
常用組合:-ef
-e:顯示所有進程相當于ps ax;
-f:顯示完整格式的進程信息;
常用組合:-eFH
-F:顯示更完整格式的進程信息;
-H:以進程層級格式顯示進程相關信息
常用組合:-eo,axo
-o:以自定義指定字段顯示
-eo ? ? ?pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
axo ? ? stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
ni:nice值;
pri:優先級;
psr:運行于哪顆cpu;
rtprio:實時優先級;
ppid:父進程;
pgrep,pkill:
pgrep ? [options] ? pattern
pkill ? [options] ? pattern
-U uid:真實用戶
-u uid:有效用戶
-t terminal:與指定終端相關的進程
-l:顯示進程名
-a:顯示完整格式的進程名
-P pid:顯示其父進程為此處指定進程的進程列表
pidof:根據進程名獲取其pid
top:有許多內置命令:
排序:P:占據CPU時間百分比;
M:占據的內存百分比;
T:累計占據cpu時長;
首部信息顯示:
l:uptime信息;
t:任務及cpu信息;
1:cpu分別顯示;
m:內存信息;
q:退出命令;
s:修改刷新時間間隔;
k:kill,終止指定進程
其中cpu信息中各子項的意義:
us:用戶空間
sy:內核空間
ni:nice值
id:空閑比例
wa:等待io完成
hi:處理硬件中斷
si:處理軟件中斷
st:被虛擬化技術偷走的時間
htop命令:
s:跟蹤選定進程的系統調用;
l:顯示選定進程打開的文件列表;
a:將選定進程綁定至某指定cpu核心;
t:顯示進程樹;
vmstat:報告虛擬內存的使用信息
vmstat [options] [delay [count]]
procs ? ? {r:等待運行的進程的個數;
b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度);}
memory ? {swpd:交換內存的使用總量;
free:空閑物理內存總量;
buff:用于buff的內存總量;
cache:用于cache的內存總量}
swap ? {si:數據進入swap中的數據速率(kb/s)
so:數據離開swap中的數據速率(kb/s)}
io ? {bi:從塊設備讀入數據到系統的速率(kb/s)
bo:保存數據至塊設備的速率(kb/s)}
system ? {in:中斷速率
cs:進程切換的速率}
cpu ? {us:用戶空間
sy:內核空間
id:空閑比例
wa:等待io完成所消耗的時間比例
st:被虛擬化技術偷走的時間比例}
選項:
-s:顯示內存的統計數據
pmap – report memory map of a process:顯示指定進程ID號的內存映射關系
選項:
-x:顯示詳細格式的信息;
其真實文件保存在:/proc/PID/maps;
glances – A cross-platform curses-based system monitoring tool:跨平臺的基于指針的系統監控工具
內建命令:h:獲取幫助
C/S模式下運行glances命令:適合于內網監控。
服務端模式:glances -s -B IPADDR
客戶端模式:glances -c IPADDR
dstat – versatile tool for generating system resource statistics:用于生成系統資源統計信息的萬能工具
dstat [-afv] [options..] [delay [count]]
常用選項:
-c:cpu相關信息;
-C #,#,…,total
-d:硬盤相關信息;
-D total,sda,sdb,…
-g:顯示page相關統計數據
-m:顯示內存相關統計數據
-n:顯示network相關統計數據
-p:顯示process相關統計數據
-r:顯示IO相關統計數據
-s:顯示swapped相關統計數據
–tcp:顯示tcp協議
–udp:顯示udp協議
–raw:顯示raw
–socket:顯示tcp、udp、socket等等
–ipc:顯示進程間通訊
–top-cpu:顯示最占用cpu的進程
–top-io:顯示最占用io的進程
–top-mem:顯示最占用內存的進程
–top-latency:顯示延遲最大的進程
kill命令:向進程發送控制信號,以實現對進程管理;
顯示當前系統可用控制信號:1、kill -l;2、 man 7 signal
常用控制信號:
1) SIGHUP:無需關閉進程而讓其重讀配置文件;
2) SIGINT:中止正在運行的進程;相當于Ctrl+c;
9) SIGKILL:殺死正在運行的進程;
15) SIGTERM:終止正在運行的進程;
18) SIGCONT:讓停止態的進程運行;
19) SIGSTOP:讓進程處于停止態;
kill [-s signal|-SIGNAL] pid…
終止“名稱”之下的所有進程;
killall?[-s signal|-SIGNAL] pid…
Linux系統作業控制:
job:
前臺作業(foregroud):通過終端啟動,且啟動后會一直占據終端;
后臺作業(background):可以通過終端啟動,但啟動后即轉入后臺運行(釋放終端);
如何讓作業運行于后臺?
(1)運行中的作業
Ctrl+Z ? 注意:送往后臺后,作業會轉為停止態;
(2)尚未啟動的作業
# COMMAND & ? ? 注意:此類作業雖然被送往后臺,但其依然跟終端相關;如何希望送往后臺的作業剝離與終端的關系: # nohup COMMAND &
查看所有的作業列表:jobs
可實現作業控制的常用命令:
# fg [%] 作業號:把指定的作業調回前臺;
# bg?[%] 作業號:讓送往后臺的作業在后臺繼續運行;
# kill?% 作業號:終止對應的作業;
調整進程優先級:
可通過nice值調整的優先級范圍:100-139;分別對應于:-20,19
進程啟動時,其nice值默認為0,其優先級為120;
nice命令:以指定的nice值啟動并運行命令;
nice [OPTION] [COMMAND [ARG]…]
選項:-n NICE
注意:僅管理員可調低nice值;
renice [-n] NICE pid…:調整正在運行進程的nice值
查看NICE值和優先級:
# ps axo pid,ni,priority,comm
未涉及的命令:sar,tsar,
網絡客戶端工具:
ping、lftp、ftp、lftpget、wget等
ping [option]?destination
-c #:發送的ping包個數;
-w #:ping命令超時時長
-W #:一次ping操作中,等待對方響應的超時時長;
-s #:指名ping包報文大??;
hping命令:
–fast
–faster
–flood
-i ux
traceroute命令:跟蹤從源主機到目標主機之間經過的網關;
ftp命令:ftp服務命令行客戶端工具;
lftp [-p port] [-u user[,pass]] [site]
get,mget
put,mput
rm,mrm
wget [option]… [URL]…
-b:在后臺執行下載操作;
-q:靜默模式,不顯示下載進度;
-O file:下載文件的保存位置;
-c:續傳;
–limit-rate=amount:以指定的速率傳輸文件;
bash編程:
順序執行:
選擇執行:if,case
循環執行:for,while,until
for循環格式:
for VARAIBLE in LIST;do
循環體
done
while循環格式:
進入循環條件:CONDITION測試為“真”;
退出循環條件:CONDITION測試為“假”;
while CONITION;do
循環體
循環控制變量修正表達式
done
until循環格式:
進入循環條件:CONDITION測試為“假”;
退出循環條件:CONDITION測試為“真”;
until CONITION;do
循環體
循環控制變量修正表達式
done
例子:打印九九乘法表
#!/bin/bash
#
for j in {1..9};do
for i in $(seq 1 $j);do
echo -n -e “${i}x${j}=$[${i}*${j}]\t”
done
echo
done
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/91504