進程
- 每個進程都有唯一的編號,在/proc下可以看到,每個文件夾就代表一個進程,
- { }中的進程表示線程,每個進程有一個或者多個線程
- 每個線程獨立工作,線程共享磁盤空間
- 父進程被殺,子進程自動消失
- 圖形界面比較占資源,建議關閉圖形界面,用時開啟切換
- 如果一個進程占用的內存資源一致在增長,那么說明該程序開發有問題
Process :程序運行起來就叫進程,運行程序的一個副本,是被載入內存的一個指令集合
進程ID(process ID ,PID)號碼被用來標記各個進程
UID,GID,SELINUX決定對文件系統的存取和訪問權限
通常從執行進程的用戶來繼承
進程存在生存周期
CENTOS6中第一個進程為 init (進程號為1),其余都為init的子進程
CENTOS7中第一個進程為 system (進程號為1),其余的為system的子進程
進程創建:父子進程
進程都由其父進程創建
開啟一個子進程,只有當子進程發生數據更改時,則在內存中開辟一塊空間(COW寫時復制)
進程優先級
系統優先級:數字越小,優先級越高(0-99)
實時優先級:數值越大,優先級越高
Nice值:值越高,優先級越小,可以手動調整(-20—-19)
Renice ?-n ??# ?:可以調整nice優先級(程序在運行狀態調整nice值)
指定以#優先級運行程序
Nice ?-n ?5 ?ping 127.0.0.1
Pri:priority 優先級
Psr:processor CPU編號
Rtprio:實時優先級
例:ps ?axo ?cmd,pid,ni,pri,rtprio
進程類型
守護進程:daemon,開機自動啟動,和終端無關,不需要用戶登錄即可啟動
前臺進程:和終端有關,需要用戶登錄啟動
守護進程和前臺進程可以相互轉化
進程狀態
運行狀態,就緒狀態,睡眠狀態,停止狀態,僵死狀態
R:運行或就緒狀態
D:不可中斷的睡眠
S:可中斷的睡眠
T:停止狀態
Z:僵死狀態(該狀態太多會影響系統性能,重啟之后恢復)
<:高優先級進程
N:低優先級進程
t:前臺進程組中的進程
l:多線程進程
s:會話(子進程)發起者
+:前臺進程
進程命令
Pstree:顯示樹狀進程(進程樹)
-p:顯示進程pid
-p ?user:顯示該用戶的進程
-ps #:查看和自己有父子關系的進程,包括自己,自己的父進程和子進程(centos7可用)
-H:高亮顯示(沒有顏色)
Ps:process stats 顯示當前進程狀態
顯示當前終端下的進程
三種風格選項
Unix ??-options
BSD ??options ?直接跟選項
GNU ??–options 長選項
BSD選項
a :顯示所有和終端相關的進程
x :和終端無關的進程(?表示)
u :顯示進程所有者的信息
Ps ?auxf :以樹狀顯示進程
o 屬性… 選項顯示定制的信息 pid、cmd、%cpu、%mem
k|–sort 屬性 對屬性排序,屬性前加- 表示倒序(centos7上好用)
L:顯示支持的屬性列表
UNIX風格選項
-C:cmdlist指定命令,多個命令用,隔開(相當于過濾)
-L:顯示線程
-e:顯示所有進程,相當于-A
-f:顯示完整格式的程序信息
-F:顯示更完整格式的進程信息
-H:以進程層級格式顯示進程的相關信息
-u:userlist 指定有效用戶ID或名稱
-U:指定真正的用戶ID或名稱(SUID)
-g:gid或grouplist 指定有效的gid或組名稱
-G:指定真正的gid或者組名(SGID)
-p:顯示指定pid的進程
–ppid pid ?:顯示屬于pid的子進程
例:ps -x ?查詢你擁有的所有進程(哪個用戶登錄,就顯示哪個用戶的進程)有效用戶
Ps -fU username|UID :顯示指定用戶(RUID)的進程(發起者的進程,有效用戶也會顯示)
Ps -fu username|UID :顯示指定用戶(EUID)的進程(不顯示 有效用戶的進程,如psswd不會顯示)
Ps -fG groupname:列出該組名所擁有的所有進程
Ps -fg groupname:列出有效組名所擁有的有效進程
Ps -fp pid ?通過進程ID來顯示所屬的進程
Ps -f –ppid uid:以父進程ID 來顯示其下所有的進程
Ps -ft 終端:按照終端來顯示所屬進程
Ps -e –forest:以進程樹顯示系統中的進程如何互相鏈接
Ps -f –forest -C 進程名稱:以進程樹顯示指定的進程
查找占用最多內存和CPU的進程:
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%mem | head
ps -eo pid,ppid,cmd,%mem,%cpu –sort=-%cpu | head
Pgrep
pgrep [options] pattern (表達式)
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程 (只顯示進程ID,配合-l使用)
-l: 顯示進程名
-a: 顯示完整格式的進程名
-P pid: 顯示指定進程的子進程
Pidof ?查看進程名
Pidof ?進程名
例:pidof ?bash |httpd
Uptime 負載
顯示當前時間,系統已啟動的時間、當前上線人數,系統平均負載(1、5、10分鐘的平均負載,一般不會超過1)
Top 動態查看進程狀態
-d #:指定刷新時間間隔,默認為3秒
-b:全部顯示,所有進程
-n #:刷新多少次后退出
欄位信息簡介
us:用戶空間
sy:內核空間
ni:調整nice時間
id:空閑
wa:等待IO時間
hi:硬中斷
si:軟中斷(模式切換)
st:虛擬機偷走的時間
M:根據駐留內存大小排序
P: 根據cpu使用百分比進行排序(默認就是cpu排序)
T: 根據累計時間進行排序
l:是否顯示平均負載和啟動時間
t:是否顯示進程和cpu狀態相關信息
m:是否顯示內存相關信息
c :是否顯示完整的命令行信息
q:退出top
k:終止某個進程
W:保存文件
z:添加顏色
Htop(top升級版自帶顏色,需要epel安裝)
-d #:指定延遲時間
-u username:僅顯示指定用戶的進程
-s colume:以指定字段進行排序
子命令
s : 跟蹤選定進程的系統調用
l : 顯示選定進程打開的文件列表
a :將選定的程序綁定至某指定的CPU核心
t : 顯示進程樹
?
Lsof ?-i ?:+端口號 ?。翰榭茨膫€進程使用該端口號
Vmstat: 虛擬內存信息
-s:顯示內存的統計數據
procs:
r:可運行(正運行或等待運行)進程的個數,和核心數有關
b:處于不可中斷睡眠態的進程個數(被阻塞的隊列的長度)
memory:
swpd: 交換內存的使用總量
free:空閑物理內存總量
buffer:用于buffer的內存總量
cache:用于cache的內存總量
swap:
si:從磁盤交換進內存的數據速率(kb/s)
so:從內存交換至磁盤的數據速率(kb/s)
io:
bi:從塊設備讀入數據到系統的速率(kb/s)
bo: 保存數據至塊設備的速率
system:
in: interrupts 中斷速率,包括時鐘
cs: context switch 進程切換速率
cpu:
us:Time spent running non-kernel code 用戶空間
sy: Time spent running kernel code 內核空間
id: Time spent idle. Linux 2.5.41前,包括IO-wait time. ??空閑
wa: Time spent waiting for IO. 2.5.41前,包括in idle. ?等待io時間
st: Time stolen from a virtual machine. 2.6.11前, unknown. ?被偷走的時間
Iostat:統計cpu和設備的IO信息
查看哪塊磁盤的壓力大
例?:iostat 1 ?10 ?每一秒執行此,執行10次以后推出
Pmap:查看進程和內存的映射關系
Pmap ?options ?pid
-x:顯示詳細格式的信息
Glances:epel源 ?遠程監控主機狀態
常用選項:
-b: 以Byte為單位顯示網卡數據速率
-d: 關閉磁盤I/O模塊
-f /path/to/somefile: 設定輸入文件位置
-o {HTML|CSV}:輸出格式
-m: 禁用mount模塊
-n: 禁用網絡模塊
-t #: 延遲時間間隔
-1:每個CPU的相關數據單獨顯示
C/S模式下運行glances命令
v服務器模式:
glances -s -B IPADDR
IPADDR: 指明監聽的本機哪個地址
v客戶端模式:
glances -c IPADDR
IPADDR:要連入的服務器端地址
dstat命令:系統資源統計,代替vmstat,iostat
dstat [-afv] [options..] [delay [count]]
-c: 顯示cpu相關信息
-C #,#,…,total
-d: 顯示disk相關信息
-D total,sda,sdb,…
-g:顯示page相關統計數據
-m: 顯示memory相關統計數據
-n: 顯示network相關統計數據
-p: 顯示process相關統計數據
-r: 顯示io請求相關的統計數據
-s: 顯示swapped相關的統計數據
–tcp
–udp
–unix
–raw
–socket
–ipc
–top-cpu:顯示最占用CPU的進程
–top-io: 顯示最占用io的進程
–top-mem: 顯示最占用內存的進程
–top-latency: 顯示延遲最大的進程
Iotop : 用來監視磁盤I/O使用狀況的top類工具
iotop具有與top相似的UI,其中包括PID、用戶、I/O、進程等相關信息??刹榭疵總€進程是如何使用IO
iotop輸出
第一行:Read和Write速率總計
第二行:實際的Read和Write速率
第三行:參數如下:
線程ID(按p切換為進程ID)
優先級
用戶
磁盤讀速率
磁盤寫速率
swap交換百分比
IO等待所占的百分比
線程/進程命令
options
-o, –only只顯示正在產生I/O的進程或線程。除了傳參,可以在運行過程中按o生效。
v-b, –batch非交互模式,一般用來記錄日志。
v-n NUM, –iter=NUM設置監測的次數,默認無限。在非交互模式下很有用。
v-d SEC, –delay=SEC設置每次監測的間隔,默認1秒,接受非整形數據例如1.1。
v-p PID, –pid=PID指定監測的進程/線程。
v-u USER, –user=USER指定監測某個用戶產生的I/O。
v-P, –processes僅顯示進程,默認iotop顯示所有線程。
v-a, –accumulated顯示累積的I/O,而不是帶寬。
v-k, –kilobytes使用kB單位,而不是對人友好的單位。在非交互模式下,腳本編程有用
-t, –time 加上時間戳,非交互非模式
-q, –quiet 禁止頭幾行,非交互模式,有三種指定方式
Kill命令
不能kill ?-9 ?1 ,雖然殺不死,但是會重傷,可能會影響一些程序的正常運行
向進程發送控制信號,以實現對進程管理,每個信號對應一個數字,信號名稱以SIG開頭(可省略),不區分大小寫
顯示系統可用信號: ?kill -l ???或者 ??grap ?-l
信號分類
0、測試信號,查看該進程是否在存在
- SIGHUP:無須關閉進程而讓其重讀配置文件
- SIGINT:中止正在運行的進程,相當于ctrl+c
- SIGQUIT:相當于ctrl+\
- SIGKILL:強制殺死正在運行的進程
- SIGTERM:終止正在運行的進程(正常終止)(默認信號)
- SIGCONT:繼續運行
19、SIGSTOP:后臺休眠
指定信號的方法:
(1) 信號的數字標識:1, 2, 9
(2) 信號完整名稱:SIGHUP (3) 信號的簡寫名稱:HUP
用法?,options
按PID:kill [-SIGNAL] pid …
kill –n SIGNAL pid;
kill –s SIGNAL pid
例:kill ?-# ??pid
Killall ???按名稱:killall [-SIGNAL] comm…
Killall ?-9 ?sleep:殺掉所有sleep進程
按模式:pkill [options] pattern
-SIGNAL :僅pkill可用
-u uid: effective user,生效者
-U uid: real user,真正發起運行命令者
-t terminal: 與指定終端相關的進程
-l: 顯示進程名(pgrep可用)
-a: 顯示完整格式的進程名(pgrep可用)
-P pid: 顯示指定進程的子進程
作業管理
前臺作業:通過終端啟動,且啟動后一直占據終端;
后臺作業:可通過終端啟動,但啟動后即轉入后臺運行(釋放終端)
讓作業運行于后臺(作業放到后臺,默認為休眠狀態)
運行中的作業:ctrl+z
尚未運行的作業:command ?&
查看當前終端放在后臺的所有作業:jobs
Fg (jobs—num作業號):把后臺作業調回前臺(%可省略)
Bg (jobs—num作業號):讓送往后臺的作業在后臺繼續運行(%可省略)
Kill ?(jobs—num作業號):終止指定的作業(必須有%)
后臺作業雖然被送往后臺運行,但其依然與終端相關;退出終端,將關閉后臺作業。如果希望送往后臺后,剝離與終端的關系
nohup COMMAND &>/dev/null &
screen;COMMAND
(遠程執行大的任務建議開啟screen或者nohup,以防止斷網引起任務終止)
前后臺作業切換圖示
并行任務
方法1
vi all.sh
f1.sh&
f2.sh&
f3.sh&
方法2
(f1.sh&);(f2.sh&);(f3.sh&)
方法3
{ f1.sh& f2.sh& f3.sh& }
任務計劃
Centos6查看任務啟動:chkconfig ??–list ?服務名
設置開機啟動:chkconfig ??服務名 ??on
Centos7查看任務啟動:systemctl ?is-enabled ?服務名
設置開機啟動:systemctl ?enable ?服務名
與服務器同步時間
Ntpdate ?服務器IP
At:適用于一次性任務(ctrl+d 退出任務)
- At命令依賴于atd服務,需要啟動服務才可以運行
- 任務執行完成后,任務自動刪除
- 在任務計劃中,所有標準輸出,默認在屏幕上不輸出
- 在/var/spool/at目錄下也可以看到at的任務計劃
-v:顯示版本信息
-l:列出等待運行的計劃作業,相當于atq
-d:刪除指定的作業,相當于atrm
-c:查看具體的作業任務
-f /path/from/somefile :從指定的文件中讀取任務
-m:當任務被完成之后,發送郵件給用戶,一個空郵件
At黑白名單
/etc/at.deny:at任務黑名單,在該名單中的用戶,不允許創建at任務,系統創建
/etc/at.allow:at任務白名單,在該名單中的用戶,允許創建at任務,需要手動創建
如果同一個用戶,同時存在于黑白名單中,那么白名單的優先級高于黑名單,白名單中的用戶生效
如果存在白名單,那么在白名單之外的用戶,將全部被拒絕創建at任務
如果黑白名單文件都不存在,所有用戶全部被拒絕,只用root可以創建
Cron 周期性執行任務計劃
- 建議將任務計劃放置于/etc/cron.d/下,創建文本,有利于管理
- /etc/cron.{allow,deny}用法和權限限制都和at 一致
查看crond運行狀態
Centos7 ?: ?systemctl ?status ?crond
Centos6 ?: ?service ?crond ?status
cron日志存放位置: /var/log/cron
Cron 任務計劃:系統維護作業
/etc/crontab ??在該文件中定義cron計劃任務
格式:
# 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
30 ?2 * ?* ?* ??yan ???backup
每天的2:30 ?yan用戶執行backup任務
注:
- 每月的幾號和每周的星期幾,是或者的關系,除此之外都是并且的關系
- 在/etc/crontab中定義任務,用使用命令是,注意有些特殊符號需要轉義
用戶cron任務:crontab命令
- 每個用戶都有專用的cron任務文件:/var/spool/cron/username
- 用戶創建任務計劃,默認打開的是vi不是vim,需要自己定義,加入命令export ENDTOR=vim
Crontab命令
Crontab ?-u user ?[ options ]
-l:列出所有任務
-e:編輯任務
-r:移除所有任務
-i:同-r一同使用,以交互式模式移除指定任務(給出提示是否刪除)
-u user :僅root可運行,指定用戶管理cron任務
?
時間表示法:
- (1) 特定值
給定時間點有效取值范圍內的值
- (2) *
給定時間點上有效取值范圍內的所有值
表示“每…”
- (3) 離散取值
#,#,#
- (4) 連續取值
#-#
- (5) 在指定時間范圍上,定義步長
/#: #即為步長
控制用戶執行計劃任務
/etc/cron.{allow,deny}
?
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/90459