原本應該將進程的概念發佈的,惋惜忘了作數據備份,重作了系統才後知後覺,因此,對於進程的概念仍是將起系統管理類寫完以後進行其補充,那麼在上一章中咱們進行簡單的梳理一下,進程的運行狀態大概分爲運行態、就緒態、睡眠態、中止態、僵死態
,而睡眠態則可分爲可中斷睡眠及不可中斷睡眠,這是根據其進程在CPU上的運行週期來決定其進程狀態,假設正在運行中的進程,而時間週期卻已經耗盡,那麼無論有多不情願都得先散場退居二線。linux
通常來說可中斷睡眠是等待IO完成而被阻塞的進程,CPU運行速度很快,一旦指令進程用到數據時,若是要從磁盤上加載到內存中的話,CPU只能是白白的空轉,並建立子進程來處理,等待加載IO完成,那麼這個過程咱們就稱之爲等待IO完成過程,但CPU空轉對於系統來講是一種資源浪費,一旦某個進程遭遇阻塞,那麼內核讓其CPU其運行其它的進程指令,回過頭來,當那個子進程完成數據加載時,CPU就會暫時中止處理其它進行,然後則父進程銷燬子進程而且繼續運行。session
那麼線程就是輕量級的進程,是進程的子單位,一個進程流能夠生成多個線程,而多個線程可並行運行,從而該進程可運行的速度更快,可是前提是主機上必定要有多個CPU核心,不然會很麻煩,由於須要調度及切換,在切換過程當中又浪費了大量的時間週期。多線程
那麼咱們在這一章節中開始講述Linux的管理工具,大約涉及的命令工具備:ide
pstree, ps, pidof, pgrep, top, htop, glances, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup, nice, renice, killall, ...
在RHEL
系列,不管是CentOS 5, 6, 7
的啓動方式以及管理進程的方式都不同。進程是運行程序的實體,內核都必需要管理進程,由於任何程序的運行都必須得接受內核管理,內核給進程建立了一個虛擬的空間,給出了除了該進程以及內核存在,任何一個進程,對於內核來講必需要進行追蹤,不管是建立及銷燬進程,都是由內核管理,不過內核其實並不想管理太多繁雜之事,對於用戶空間的請求,統一由一個進程來管理,稱之爲init
,由它代理並向內核發起請求。工具
CentOS 5:SysV init CentOS 6:upstart CentOS 7:systemd /sbin/init
如今就開始介紹一些進程管理命令,第一個命令爲pstree
,該命令是對進程樹進行查看,那麼所看到系統的頂級進程對於不一樣的系統版原本講有多是不同的,那麼在CentOS 7
中所看到的是systemd
進程,而對於CentOS 5,6
來講,其頂級進程爲init
。ui
pstree命令: pstree - display a tree process
那麼接下來命令爲ps
命令,改命令就是將當前系統運行這一刻的狀態截取並顯示,不過只顯示命令這一刻一次全部的進程狀態。在用戶空間中,經過接口/proc/
僞文件系統,內核就將本身內部不少的狀態信息是經過/proc
輸出給用戶的。而這些狀態信息就是其內核的參數,一類是可設置的參數,用於改變內核運行特徵,路徑在:/proc/sys
,而另外的一種爲狀態參數,用於輸出內核統計的狀態信息,僅對用戶查看。爲了能延續Linux哲學思想一切皆文件,因此將參數模擬成文件系統讓在用戶空間中供給用戶進行查看。而每個proc
下的進程文件,都有一個目錄,以數字命名,這個數字就是PID
,存放着各類狀態信息。spa
ps命令: /proc/:內核中的狀態信息; 內核參數: 可設置其值從而調整內核運行特徵的參數;/proc/sys/ 狀態變量:其用於輸出內核統計信息或狀態信息,僅用於查看; 參數:模擬成文件系統類型; 進程: /proc/#
那麼該命令的用法爲:線程
ps - report a snapshot of the current processes. ps [options]
而對於選項來說,共有三種風格的選項:代理
選項有三種風格: 1 UNIX options, which may be grouped and must be preceded by a dash. 2 BSD options, which may be grouped and must not be used with a dash. 3 GNU long options, which are preceded by two dashes.
在咱們啓動進程時,共有兩種方式,一種是經過終端啓動,另外一種是無需經過終端來啓動,在系統啓動過程當中自動啓動的程序,咱們稱之爲與終端無關的進程,而用戶經過終端啓動某一個程序載入內存讓其CPU運行爲進程時,咱們就稱之爲與終端相關的進程。code
啓動進程的方式: 系統啓動過程當中自動啓動:與終端無關的進程; 用戶經過終端啓動:與終端相關的進程;
而咱們可使用一些選項用來查看與終端有關及無關的進程。
選項: a:全部與終端相關的進程; x:全部與終端無關的進程; u:以用戶爲中心組織進程狀態信息顯示;
那麼接下來咱們開始說一次該命令的經常使用組合。
經常使用組合之一:aux VZS:虛擬內存集; RSS:Resident Size,常駐內存集; STAT: R:running S: interrupdate sleeping D: uninterrupdate sleeping T: Stopped Z: zombie +:前臺進程; l:多線程進程; N:低優先級進程; <:高優先級進程; s:session leader;(會話引領者)
# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.6 128164 6824 ? Ss 14:35 0:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0.0 0.0 0 0 ? S 14:35 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 14:35 0:00 [ksoftirqd/0] root 1057 0.0 0.0 110044 828 tty1 Ss+ 14:36 0:00 /sbin/agetty --noclear tty1 linux root 1032 0.0 1.6 614636 16860 ? Ssl 14:36 0:00 /usr/sbin/libvirtd root 240 0.0 0.0 0 0 ? S< 14:35 0:00 [mpt_poll_0] root 601 0.0 0.1 16840 1016 ? SNs 14:35 0:00 /usr/sbin/alsactl -s -n 19 -c -E ALSA_CONFIG_PATH=/etc/alsa/alsactl.conf --initfil root 7152 0.0 0.1 151064 1812 pts/0 R+ 20:39 0:00 ps aux
以上就是第一組選項組合方式,共有四種的組合方式,咱們如今來講第二種。
選項: -e:顯示全部進程; -f:顯示完整格式的進程信息;
那麼對於經常使用組合之二,-ef
,爲Unix風格。
# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 14:35 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 2 0 0 14:35 ? 00:00:00 [kthreadd] root 3 2 0 14:35 ? 00:00:01 [ksoftirqd/0] root 5 2 0 14:35 ? 00:00:00 [kworker/0:0H]
而經常使用組合之三爲-efH
。
選項: -F:顯示完整格式的進程信息(與-f意義基本相同,不過顯示更加詳細); C: cpu utilzation(CPU利用率); PSR: 運行於那顆CPU之上; -H:以層級結構顯示進程的相關信息;
# ps -efH root 1 0 0 14:35 ? 00:00:06 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 root 354 1 0 14:35 ? 00:00:05 /usr/lib/systemd/systemd-journald root 381 1 0 14:35 ? 00:00:00 /usr/sbin/lvmetad -f root 391 1 0 14:35 ? 00:00:02 /usr/lib/systemd/systemd-udevd root 511 1 0 14:35 ? 00:00:00 /sbin/auditd root 513 511 0 14:35 ? 00:00:00 /sbin/audispd root 515 513 0 14:35 ? 00:00:00 /usr/sbin/sedispatch
而經常使用組合之四共有兩個,第一個-eo
,另外一個爲axo
。
經常使用組合之四:-eo o field1, field2, ...:自定義要顯示的字段列表,以逗號分隔; 經常使用的有:field: pid, ni, pri, psr, pcpu, stat, comm, tty, ppid, rtprio ni:nice值; priority:priority, 優先級; rtprio:real time; priority,實時優先級; axo
接下來介紹的命令爲pgrep
和pkill
,從pgrep中看的出來,是作一個進程過濾的一個專用命令,而pkill是從過濾出的進程將其殺死關閉,根據其進程名字或其它信息來將其爲進程發送信號,因此這兩個命令能夠組合使用,使用格式都是同樣的,而使用格式爲:
pgrep [options] pattern
該命令的選項爲:
-u, uid:effective user -U, uid:read user -t, TERMAINAL:與指定的終端相關的進程; -l:顯示進程名; -a:顯示完整格式的進程名; -P, pid:顯示此進程的子進程;
下一個介紹的命令爲pidof
命令,該命令是截取其進程的ID號的,輸入進程名,得到其進程號。
pidof命令: 根據進程名,取其pid;
接下來所講的是top
命令,它所展現的相似於Windows的任務管理器,它是以動態方式來不斷刷新來查看其進程,數值從大到小逆序排序,默認爲CPU進行排序。
top命令: top - display Linux processes 排序: P:以佔據CPU百分比排序; M:以佔據內存百分比排序; T:累計佔用CPU時間排序; 首部信息: uptime:l命令; task及CPU信息:t命令; 內存信息:m命令; 退出命令:q 修改刷新時間間隔:s 終止指定的進程:k
該命令的選項爲:
選項: -d #:指定刷新時間間隔,默認爲3秒; -b:以批次方式顯示; -n:顯示多少批次;
uptime
命令就是跟top第一列上的信息做用幾乎無異,該命令爲顯示系統時間,運行的時長以及平均負載(load average
)。而這個平均負載指的是過去一分鐘、五分鐘和十五分鐘的平均負載,而這個平均負載就是顯示等待運行的進程隊列的長度。