目錄
Linux進程管理
8.1 IO負載
8.2 實時進程監(jiān)控
5.1 作業(yè)與會話
5.2 作業(yè)分類
4.1 ps
4.2pstree
4.3pgrep
4.4pidof
4.5 vmstat
3.1Linux進程調(diào)度與多任務
3.2進程優(yōu)先級
3.3相對優(yōu)先級
3.4nice級別與權(quán)限
3.5進程優(yōu)先級調(diào)整
1.1進程的組成部分
1.2進程的環(huán)境
1.3進程的產(chǎn)生
1.4進程的分類
1.進程基本概述
2.進程狀態(tài)
3.進程優(yōu)先級
4.進程命令
5. 控制作業(yè)
6.進程間通信
7.使用信號控制進程
監(jiān)控進程活動
作業(yè)
1.進程基本概述
進程是已啟動的可執(zhí)行程序的運行中實例。
/proc目錄下以數(shù)字為名的目錄,每一個目錄代表一個進程,保存著進程的屬性信息。每一個進程的PID是唯一的,就算進程退出了,其它進程也不會占用其PID。
1.1進程的組成部分
1.1.1 已分配內(nèi)存的地址空間
1.1.2 安全屬性,包括所有權(quán)憑據(jù)和特權(quán)
1.1.3 程序代碼的一個或多個執(zhí)行線程
1.1.4 進程狀態(tài)
1.2進程的環(huán)境
1.2.1 本地和全局變量
1.2.2 當前調(diào)度上下文
1.2.3 分配的系統(tǒng)資源,如文件描述符和網(wǎng)絡端口
1.3進程的產(chǎn)生
現(xiàn)有的(父)進程復制自己的地址空間(fork)來創(chuàng)建一個新的(子)進程結(jié)構(gòu)。
每個新進程分配有一個唯一的進程ID(PID),滿足跟蹤和安全性之需。PID與父進程ID(PPID)是新進程環(huán)境的元素。
任何進程可創(chuàng)建子進程。所有進程都是第一個系統(tǒng)進程的后代。RHEL7上,第一個系統(tǒng)進程是systemd。
通過fork例程,子進程繼承安全性身份、過去和當前的文件描述符、端口和資源特權(quán)、環(huán)境變量,以及程序代碼。隨后,子進程可能exec其自己的程序代碼。通常,父進程在子進程運行期間處于睡眠狀態(tài),設置一個在子進程完成時發(fā)出信號的請求(wait)。在退出時,子進程可能已經(jīng)關(guān)閉或丟棄了其資源和環(huán)境,剩余的部分被稱作僵停。父進程在子進程退出時收到信號而被喚醒,清理剩余結(jié)構(gòu),然后繼續(xù)執(zhí)行其自己的程序代碼。
1.4進程的分類
1.4.1 前臺進程:與終端相關(guān)的進程,通過終端啟動的進程
注意:也可把在前臺啟動的進程送往后臺,以守護模式運行
1.4.2 守護進程:daemon,與終端無關(guān)的進程(如內(nèi)核),在系統(tǒng)引導過程中啟動的進程
2.進程狀態(tài)
Excuting | 運行態(tài) |
---|---|
Ready | 就緒態(tài),也可以稱作睡眠態(tài) |
Uninterruptible sleep | 不可中斷的睡眠。不可隨時喚醒,只有當IO資源加載成功后才能喚醒 |
Interruptible sleep | 可中斷的睡眠。可隨時喚醒 |
Zombie | 僵尸進程。正常運行結(jié)束了,但是不釋放占據(jù)的內(nèi)存 |
Stopped | 停止態(tài),暫停于內(nèi)存中,但不會被調(diào)度,除非手動啟動之 |
進程睡眠的原因:
當一個執(zhí)行中的進程,需要加載額外的IO資源的時候,由于IO設備的速度太慢,所以會轉(zhuǎn)入睡眠狀態(tài)等待,交出CPU給其他進程,以免浪費剩余執(zhí)行時間
Linux進程狀態(tài)
標志 | 內(nèi)核定義的狀態(tài)名稱和描述 |
---|---|
R | TASK_RUNNING:進程正在CPU上執(zhí)行,或者正在等待運行。處于運行中(或可運行)狀態(tài)時,進程可能正在執(zhí)行用戶例程或內(nèi)核例程(系統(tǒng)調(diào)用),或者已排隊并就緒 |
S | TASK_INTERRUPTIBLE:進程處于睡眠狀態(tài)且正在等待某一條件:硬件請求、系統(tǒng)資源訪問或信號。當事件或信號滿足該條件時,該進程將返回到運行中 |
D | TASK_UNINTERRUPTIBLE:此進程也在睡眠,但與S狀態(tài)不同,不會響應傳遞的信號。僅在特定的條件下使用,其中進程中斷可能會導致意外的設備狀態(tài) |
K | TASK_KILLABLE:進程處于睡眠狀態(tài),與不可中斷的D狀態(tài)相同,但有所修改,允許等待中的任務通過響應信號而被中斷(徹底退出)。實用程序通常將可中斷的進程顯示為D狀態(tài) |
T | TASK_STOPPED:進程已被停止(暫停),通常是通過用戶或其他進程發(fā)出的信號。進程可以通過另一信號返回到運行中狀態(tài),繼續(xù)執(zhí)行(恢復) |
T | TASK_TRACED:正在被調(diào)試的進程也會臨時停止,并且共享同一個T狀態(tài)標志 |
Z | EXIT_ZOMBIE:子進程在退出時向父進程發(fā)出信號。除進程身份(PID)之外的所有資源都已釋放 |
X | EXIT_DEAD:當父進程清理(獲取)剩余的子進程結(jié)構(gòu)時,進程現(xiàn)在已徹底釋放。此狀態(tài)從不會在進程列出實用程序中看到 |
< | 高優(yōu)先級進程 |
N | 低優(yōu)先級進程 |
+ | 前臺進程組中的進程 |
l | 多線程進程 |
s | 會話進程首進程 |
3.進程優(yōu)先級
3.1Linux進程調(diào)度與多任務
3.1.1 現(xiàn)代計算機系統(tǒng)中既包含每次只能執(zhí)行一個指令的低端處理器,也包含高性能超級計算機,這些超級計算機每臺配備數(shù)百個CPU,每個CPU上具有多個核心,它們可以并行執(zhí)行數(shù)以百計的指令。但是所有這些系統(tǒng)往往具有一個共同點:它們需要運行的進程數(shù)量總是超出實際具有的核心數(shù)。
3.1.2 通過時間分片技術(shù),Linux(和其他操作系統(tǒng))實際能夠運行的進程數(shù)(和線程數(shù))可以超出可用的實際處理單元數(shù)。操作系統(tǒng)進程調(diào)度程序?qū)⒃趩蝹€核心上的進程之間進行快速切換,從而給用戶一種有多個進程在同時運行的印象。
3.1.3 執(zhí)行此切換的Linux內(nèi)核部分稱為進程調(diào)度程序。
3.2進程優(yōu)先級
進程優(yōu)先級范圍:0-139,數(shù)字越小,優(yōu)先級越高
0-99:實時優(yōu)先級,內(nèi)核調(diào)整
100-139:靜態(tài)優(yōu)先級,用戶可控制
進程優(yōu)先級高的特點:
獲得更多的CPU運行時間
更優(yōu)先獲得CPU運行的機會
要修改進程的優(yōu)先級可以通過調(diào)整進程的nice值來實現(xiàn),nice值越小,優(yōu)先級越高:
nice值的范圍是(-20,19),-20對應100,19對應139
3.3相對優(yōu)先級
3.3.1 由于不是每種進程都與其他進程同樣重要,可告知調(diào)度程序為不同的進程使用不同的調(diào)度策略。常規(guī)系統(tǒng)上運行的大多數(shù)進程所使用的調(diào)度策略稱為SCHED_OTHER(也稱為SCHED_NORMAL),但還有一些其他策略可用于不同的目的。
3.3.2 由于并非所有進程都以同樣的方式創(chuàng)建,可為采用SCHED_NORMAL策略運行的進程指定相對優(yōu)先級。此優(yōu)先級稱為進程的nice值。一個進程可以有40種不同級別的nice值。
3.3.3 這些nice級別的范圍是從-20到19。默認情況下,進程將繼承其父進程的nice級別,通常為0
nice級別越高,表示優(yōu)先級越低(該進程容易將其CPU使用量讓給其他進程)
nice級別越低,表示優(yōu)先級越高(該進程更加不傾向于讓出CPU)
如果不存在資源爭用(例如當活動進程數(shù)少于可用CPU核心數(shù)時),即使nice級別高的進程也將仍使用它們可使用的所有可用CPU資源。但當請求CPU時間的進程數(shù)超過可用核心數(shù)時,nice級別較高的進程將比nice級別較低的進程收到更少的CPU時間
3.4nice級別與權(quán)限
為很占CPU資源的進程設置較低的nice級別可能會對同一系統(tǒng)上運行的其他進程的性能造成負面影響,所以僅允許root用戶設置負nice級別以及降低現(xiàn)有進程的nice級別。
普通非特權(quán)用戶僅允許設置正的nice級別。只能對現(xiàn)有進程提升nice級別,而不能降低nice級別。
3.5進程優(yōu)先級調(diào)整
進程優(yōu)先級調(diào)整:調(diào)整nice值
//調(diào)整已經(jīng)啟動的進程的nice值:
renice NI PID(例:renice 3 3704)
//在啟動時指定nice值:(-20,19)
nice -n NI COMMAND
[root@lnh ~]# sleep 50000 //在另一個終端執(zhí)行的 [root@lnh ~]# ps -elf |grep sleep 0 S root 10147 10097 0 80 0 - 54261 hrtime 01:59 pts/2 00:00:00 sleep 50000 0 S root 10149 9955 0 80 0 - 55475 - 01:59 pts/0 00:00:00 grep --color=auto sleep [root@lnh ~]# renice -20 10147 10147 (process ID) old priority 0, new priority -20 [root@lnh ~]# ps -elf |grep sleep 0 S root 10147 10097 0 60 -20 - 54261 hrtime 01:59 pts/2 00:00:00 sleep 50000 0 S root 10152 9955 0 80 0 - 55475 - 02:00 pts/0 00:00:00 grep --color=auto sleep [root@lnh ~]# nice -n -10 sleep 50000 [root@lnh ~]# ps -elf |grep sleep 4 S root 10120 10097 0 70 -10 - 54261 hrtime 01:51 pts/2 00:00:00 sleep 50000 0 S root 10132 9955 0 80 0 - 55475 - 01:52 pts/0 00:00:00 grep --color=auto sleep
4.進程命令
Linux系統(tǒng)各進程的相關(guān)信息均保存在/proc/PID目錄下的各文件中
4.1 ps
ps(process state)命令用于列出當前的進程。可以顯示詳細的進程信息,包括:
1.1 用戶識別符(UID),它確定進程的特權(quán)
1.2 唯一進程識別符(PID)
1.3 CPU和已經(jīng)花費的實時時間
1.4 進程在各種位置上分配的內(nèi)存數(shù)量
1.5 進程的位置STDOUT,稱為控制終端
1.6 當前的進程狀態(tài)
2. ps支持三種選項格式:
2.1 UNIX(POSIX)選項,可以分組但必須以連字符開頭
2.2 BSD 選項,可以分組但不可與連字符同用
2.3 GNU 長選項,以雙連字符開頭
3. ps(process state),顯示進程信息。注意事項:
3.1 加了[]中括號的,表示內(nèi)核線程,通常位于頂部
3.2 exiting或defunct表示僵尸進程
4. 常用選項
a,u,x
[root@lnh ~]# ps aux |head USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.7 244780 13692 ? Ss Jul02 0:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17 root 2 0.0 0.0 0 0 ? S Jul02 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? I< Jul02 0:00 [rcu_gp] root 4 0.0 0.0 0 0 ? I< Jul02 0:00 [rcu_par_gp] root 6 0.0 0.0 0 0 ? I< Jul02 0:00 [kworker/0:0H-kblockd] root 9 0.0 0.0 0 0 ? I< Jul02 0:00 [mm_percpu_wq] root 10 0.0 0.0 0 0 ? S Jul02 0:00 [ksoftirqd/0] root 11 0.1 0.0 0 0 ? I Jul02 4:02 [rcu_sched] root 12 0.0 0.0 0 0 ? S Jul02 0:00 [migration/0] [root@lnh ~]# ps aux |grep sleep root 10078 0.0 0.0 217044 788 pts/2 S+ 01:43 0:00 sleep 20000 root 10082 0.0 0.0 221900 1036 pts/0 S+ 01:43 0:00 grep --color=auto sleep //a顯示所有與終端有關(guān)的進程,u顯示進程是由哪個用戶啟動的,x顯示所有與終端無關(guān)的進程 //USER:用戶 PID:進程id %CPU:CPU使用率 %MEM:內(nèi)存使用率 VSZ:虛擬內(nèi)存集 RSS:常駐內(nèi)存集 TTY:在哪里登錄的(?開機自啟,遠程連上去敲的命令是有位置的eg:pts/2) STAT:進程狀態(tài) TIME:運行時的累積時長 START:啟動時間 COMMAND:執(zhí)行的命令
-e ,-l,-f,-F,-H,-o
[root@lnh ~]# ps -el |head F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 1 0 0 80 0 - 61195 do_epo ? 00:00:05 systemd 1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd 1 I 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp 1 I 0 4 2 0 60 -20 - 0 - ? 00:00:00 rcu_par_gp 1 I 0 6 2 0 60 -20 - 0 - ? 00:00:00 kworker/0:0H-kblockd 1 I 0 9 2 0 60 -20 - 0 - ? 00:00:00 mm_percpu_wq 1 S 0 10 2 0 80 0 - 0 - ? 00:00:00 ksoftirqd/0 1 I 0 11 2 0 80 0 - 0 - ? 00:04:06 rcu_sched 1 S 0 12 2 0 -40 - - 0 - ? 00:00:00 migration/0 //-e顯示所有進程,與-A效果相同,-l以長格式顯示 [root@lnh ~]# ps -elf |head F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 61195 do_epo Jul02 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17 1 S root 2 0 0 80 0 - 0 - Jul02 ? 00:00:00 [kthreadd] 1 I root 3 2 0 60 -20 - 0 - Jul02 ? 00:00:00 [rcu_gp] 1 I root 4 2 0 60 -20 - 0 - Jul02 ? 00:00:00 [rcu_par_gp] 1 I root 6 2 0 60 -20 - 0 - Jul02 ? 00:00:00 [kworker/0:0H-kblockd] 1 I root 9 2 0 60 -20 - 0 - Jul02 ? 00:00:00 [mm_percpu_wq] 1 S root 10 2 0 80 0 - 0 - Jul02 ? 00:00:00 [ksoftirqd/0] 1 I root 11 2 0 80 0 - 0 - Jul02 ? 00:04:06 [rcu_sched] 1 S root 12 2 0 -40 - - 0 - Jul02 ? 00:00:00 [migration/0] //-e顯示所有進程,與-A效果相同,-l以長格式顯示,-f顯示更詳細的完整格式的進程信息. 顯示全部信息 [root@lnh ~]# ps -elF |head F S UID PID PPID C PRI NI ADDR SZ WCHAN RSS PSR STIME TTY TIME CMD 4 S root 1 0 0 80 0 - 61195 do_epo 13692 1 Jul02 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17 1 S root 2 0 0 80 0 - 0 - 0 0 Jul02 ? 00:00:00 [kthreadd] 1 I root 3 2 0 60 -20 - 0 - 0 0 Jul02 ? 00:00:00 [rcu_gp] 1 I root 4 2 0 60 -20 - 0 - 0 0 Jul02 ? 00:00:00 [rcu_par_gp] 1 I root 6 2 0 60 -20 - 0 - 0 0 Jul02 ? 00:00:00 [kworker/0:0H-kblockd] 1 I root 9 2 0 60 -20 - 0 - 0 0 Jul02 ? 00:00:00 [mm_percpu_wq] 1 S root 10 2 0 80 0 - 0 - 0 0 Jul02 ? 00:00:00 [ksoftirqd/0] 1 I root 11 2 0 80 0 - 0 - 0 2 Jul02 ? 00:04:06 [rcu_sched] 1 S root 12 2 0 -40 - - 0 - 0 0 Jul02 ? 00:00:00 [migration/0] //-F顯示詳細信息 [root@lnh ~]# ps -H PID TTY TIME CMD 9955 pts/0 00:00:00 bash 10185 pts/0 00:00:00 ps //-H以進程層級格式顯示進程相關(guān)信息 [root@lnh ~]# ps -o pid,comm,ni PID COMMAND NI 9955 bash 0 10196 ps 0 //表示只顯示進程號,命令,nice值三個字段
4.2pstree
pstree用于顯示當前系統(tǒng)上的進程樹
Linux由2棵樹組成:
進程樹
文件系統(tǒng)掛載樹
[root@lnh ~]# pstree systemd─┬─NetworkManager───2*[{NetworkManager}] ├─auditd───{auditd} ├─crond ├─dbus-daemon───{dbus-daemon} ├─firewalld───{firewalld} ├─irqbalance───{irqbalance} ├─login───bash ├─polkitd───7*[{polkitd}] ├─rhsmcertd ├─rngd───{rngd} ├─sshd─┬─sshd───sshd───bash───pstree │ └─sshd───sshd───bash ├─sssd─┬─sssd_be │ └─sssd_nss ├─systemd───(sd-pam) ├─systemd-journal ├─systemd-logind ├─systemd-udevd └─tuned───3*[{tuned}] //注意:此命令需要安裝psmisc
4.3pgrep
以grep風格指定只顯示哪些進程,在當前系統(tǒng)中找符合某些特性的進程。只顯示進程號
[root@lnh ~]# pgrep sleep 10239 [root@lnh ~]# pgrep sssd 897 909 910 [root@lnh ~]# pgrep systemd 1 728 755 914 1468 [root@lnh ~]# ps -elf |grep systemd 4 S root 1 0 0 80 0 - 61195 do_epo Jul02 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 17 4 S root 728 1 0 80 0 - 23519 do_epo Jul02 ? 00:00:01 /usr/lib/systemd/systemd-journald 4 S root 755 1 0 80 0 - 27547 do_epo Jul02 ? 00:00:01 /usr/lib/systemd/systemd-udevd 4 S dbus 895 1 0 80 0 - 21222 do_epo Jul02 ? 00:00:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only 4 S root 914 1 0 80 0 - 24697 do_epo Jul02 ? 00:00:00 /usr/lib/systemd/systemd-logind 4 S root 1468 1 0 80 0 - 23473 do_epo Jul02 ? 00:00:00 /usr/lib/systemd/systemd --user 0 S root 10236 9955 0 80 0 - 55475 - 02:23 pts/0 00:00:00 grep --color=auto systemd //顯示systemd的詳細信息
4.4pidof
根據(jù)進程名查找其PID號
[root@lnh ~]# pidof sleep 10242 [root@lnh ~]# pidof systemd 1471 1468 1
4.5 vmstat
虛擬內(nèi)存狀態(tài)查看命令
[root@lnh ~]# vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1037184 27628 468768 0 0 1 5 17 29 0 0 100 0 0 [root@lnh ~]# vmstat 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1037696 27628 468768 0 0 1 5 17 29 0 0 100 0 0 0 0 0 1037688 27628 468768 0 0 0 0 57 99 0 0 100 0 0 ^C //表示每2秒刷新一次 [root@lnh ~]# vmstat 2 2 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 0 1037436 27628 468768 0 0 1 5 17 29 0 0 100 0 0 0 0 0 1037436 27628 468768 0 0 0 0 74 113 0 0 100 0 0 //表示每2秒刷新一次,刷新2次后退出 //procs(process)進程 r:正在運行的進程個數(shù).b:睡眠狀態(tài) memory內(nèi)存 cache:緩存 buff:緩沖 free:可以用的剩余空間 swpd:交換空間(用了多少) swap:交換空間(換進換出的數(shù)量)當你的物理內(nèi)存就是真實內(nèi)存不夠用的時候,把硬盤的空間拿一部分出來當一個假內(nèi)存(不能真正運行)臨時作一個緩沖點,可以把真實內(nèi)存里面不經(jīng)常用的可以放進這個假內(nèi)存里面,讓多的空間讓其他東西去運行,運行速度還是比硬盤快swap si so就是這個過程,在假內(nèi)存的角度 io硬盤 bi:調(diào)入bo:調(diào)出 在內(nèi)存的角度 in:可中斷睡眠 cs:上下文切換(把進程調(diào)入內(nèi)存里面運行然后又調(diào)出去)數(shù)值特別大的時候可以通過加cpu的方式解決 us:用戶空間,用戶可以查找的位置 sy:內(nèi)核空間
procs:
r(running) //表示等待運行的隊列長度,也即等待運行的進程的個數(shù)
b(block) //表示阻塞隊列長度,也即處于不可中斷睡眠態(tài)的進程個數(shù)
memory:
swpd //交換內(nèi)存的使用總量
free //空閑物理內(nèi)存總量
buffer //用于buffer的內(nèi)存總量
cache //用于cache的內(nèi)存總量
swap:
si(swap in) //表示從物理內(nèi)存有多少頁面換進swap,也即數(shù)據(jù)進入swap的數(shù)據(jù)速率(kb/s)
so(swap out) //表示從swap有多少頁面換進物理內(nèi)存,也即數(shù)據(jù)離開swap的數(shù)據(jù)速率(kb/s)
io:
bi(block in) //表示磁盤塊有多少個被調(diào)入內(nèi)存中,也即從塊設備讀入數(shù)據(jù)到系統(tǒng)的速率(kb/s)
bo(block out) //表示有多少個磁盤塊從內(nèi)存中被同步到硬盤上去了,也即保存數(shù)據(jù)至塊設備的速率(kb/s)
system:
in( interrupts) //表示中斷的個數(shù),也即中斷速率(kb/s)
cs(context switch) //表示上下文切換的次數(shù),也即進程切換速率(kb/s)
CPU:
us //表示用戶空間
sy //表示內(nèi)核空間
id //表示空閑百分比
wa //表示等待IO完成所占據(jù)的時間百分比
st //表示steal,被虛擬化技術(shù)偷走的時間(比如運行虛擬機)
5. 控制作業(yè)
5.1 作業(yè)與會話
作業(yè)控制是shell的一種功能,它允許單個shell實例運行和管理多個命令。
作業(yè)與在shell提示符中輸入的每個管道相關(guān)聯(lián)。該管道中的所有進程均是作業(yè)的一部分,并且是同一個進程組的成員。(如果在shell提示符中僅輸入了一條命令,則這條命令可視為命令的最小管道。該命令將是該作業(yè)的唯一成員)
一次只能有一個作業(yè)從特定終端窗口讀取輸入和鍵盤生成的信號。屬于該作業(yè)的進程是該控制終端的前臺進程。
該控制終端的后臺進程是與該終端相關(guān)聯(lián)的任何其他作業(yè)的成員。終端的后臺進程無法從終端讀取輸入或接收鍵盤生成的中斷,但可以寫入終端。后臺中的作業(yè)可能已停止(暫停),也可能正在運行。如果某個正在運行的后臺作業(yè)嘗試從終端讀取內(nèi)容,則該作業(yè)將自動暫停。
每個終端是其自身的會話,并且可以具有一個前臺進程和多個獨立的后臺進程。一個作業(yè)只能屬于一個會話,也就是屬于其控制終端的會話。
[root@lnh ~]# sleep 5000 ^Z [1]+ Stopped sleep 5000 [root@lnh ~]# jobs [1]+ Stopped sleep 5000 //一個作業(yè)只能屬于一個會話,這個里面是ctrl+z將作業(yè)放進后臺了,然后jobs查看出來
5.2 作業(yè)分類
Linux作業(yè)分為前臺作業(yè)與后臺作業(yè)兩種。其各自的特點如下:
前臺作業(yè):通過終端啟動,且啟動后一直占據(jù)了命令提示符
后臺作業(yè):可以通過終端啟動,但啟動之后,釋放命令提示符,后續(xù)的操作在后臺完成
此類作業(yè)雖然被送往后臺運行,但其依然與終端相關(guān)。如果希望送往后臺后,剝離與終端的關(guān)系需要執(zhí)行(nohup COMMAND &)
[root@lnh ~]# fg sleep 5000 //前臺命令 ^C 終止了 [root@lnh ~]# ps -efl|grep sleep 0 S root 10305 9955 0 80 0 - 55475 - 03:33 pts/0 00:00:00 grep --color=auto sleep //不會顯示進程 [root@lnh ~]# sleep 5000 & [1] 10309 //在后臺運行 [root@lnh ~]# jobs [1]+ Running sleep 5000 & //可以看見作業(yè) [root@lnh ~]# ps -efl |grep sleep 0 S root 10309 9955 0 80 0 - 54261 hrtime 03:36 pts/0 00:00:00 sleep 5000 0 S root 10315 9955 0 80 0 - 55475 - 03:37 pts/0 00:00:00 grep --color=auto sleep //可以查看到進程 [root@lnh ~]# ps -efl |grep sleep 0 S root 10309 9955 0 80 0 - 54261 hrtime 03:36 pts/0 00:00:00 sleep 5000 0 S root 10317 10097 0 80 0 - 55475 - 03:37 pts/2 00:00:00 grep --color=auto sleep //在另外一個終端也可以查看到進行,如果把原來有后臺作業(yè)的那個終端關(guān)閉了在這里是查看不到進程的 [root@lnh ~]# fg sleep 5000 //可以將后臺的作業(yè)調(diào)入前臺 ^C //終止 //當只有一個后臺作業(yè)時,直接使用fg命令,不跟任何參數(shù)即可將后臺作業(yè)調(diào)至前臺運行 [root@lnh ~]# sleep 33333 & [1] 10319 [root@lnh ~]# sleep 44444444 & [2] 10320 [root@lnh ~]# jobs [1]- Running sleep 33333 & [2]+ Running sleep 44444444 & [root@lnh ~]# fg %1 sleep 33333 ^C [root@lnh ~]# fg %2 sleep 44444444 ^C //當有多個作業(yè)時則必須跟上%+作業(yè)號,也就是上面命令執(zhí)行結(jié)果中以[]括起來的數(shù)字 [root@lnh ~]# fg %1 sleep 44444444 ^Z [1]+ Stopped sleep 44444444 [root@lnh ~]# fg %2 sleep 33333 ^Z [2]+ Stopped sleep 33333 [root@lnh ~]# jobs [1]- Stopped sleep 44444444 [2]+ Stopped sleep 33333 //使用ctrl+z可將前臺進程發(fā)送到后臺,此時作業(yè)將處于停止狀態(tài) [root@lnh ~]# bg %1 [1]- sleep 44444444 & [root@lnh ~]# bg %2 [2]+ sleep 33333 & [root@lnh ~]# jobs [1]- Running sleep 44444444 & [2]+ Running sleep 33333 & //使用bg命令+作業(yè)號可使后臺已停止的作業(yè)重新運行 [root@lnh ~]# jobs [2]- Running sleep 2222 & [3]+ Running sleep 1111 & [root@lnh ~]# kill %2 [root@lnh ~]# jobs [2]- Terminated sleep 2222 [3]+ Running sleep 1111 & [root@lnh ~]# kill %3 [root@lnh ~]# jobs [3]+ Terminated sleep 1111 [root@lnh ~]# jobs [root@lnh ~]# //kill加上作業(yè)號可以手動殺死指定作業(yè) //jobs命令的結(jié)果中 // + 命令將默認操作的作業(yè) // - 命令將第二個默認操作的作業(yè) [root@lnh ~]# jobs [1]- Running sleep 11111 & [2]+ Running sleep 22222 & [root@lnh ~]# pkill -9 sleep [1]- Killed sleep 11111 [2]+ Killed sleep 22222 [root@lnh ~]# jobs [root@lnh ~]# jobs [root@lnh ~]# // pkill [選項] name 刪除全部進程 [root@lnh ~]# killall sleep [1]- Terminated sleep 33333 [2]+ Terminated sleep 4444444 [root@lnh ~]# jobs [root@lnh ~]# //直接全部刪除進程
6.進程間通信
進程間通信(IPC:Inter Process Communication)
進程間通信方式:
同一主機
共享內(nèi)存
信號:Signal
不同主機
rpc:remote procecure call
基于socket實現(xiàn)進程間通信
7.使用信號控制進程
信號是傳遞至進程的軟件中斷。信號向執(zhí)行中的程序報告事件。生成信號的事件可以是錯誤或外部事件(如I/O請求或計時器過期),或者來自于明確請求(如使用信號發(fā)送命令)
下表列出了系統(tǒng)管理員用于日常進程管理的基本信號。請通過短名稱(HUP)或正確名稱(SIGHUP)指代信號。
指定一個信號的方法:
信號號碼(數(shù)字標識):kill -1
信號完整名稱:kill -SIGKILL
信號簡寫名稱:kill -TERM或kill -KILL或kill -INT或kill -HUP
基本進程管理信號:
信號編號ID | 短名稱 | 定義 | 用途 |
---|---|---|---|
1 | HUP | 掛起 | 讓一個進程不用重啟就可以重讀配置文件,并讓新的配置信息生效 |
2 | INT | 鍵盤中斷 | 中斷一個前臺進程。ctrl+c就是用的SIGINT信號 |
9 | KILL | 中斷,無法攔截 | 導致立即終止程序。無法被攔截、忽略或處理 |
15默認值 | TERM | 終止 | 導致程序終止。和SIGKILL不同,可以被攔截、忽略或處理。要求程序終止的友好方式,允許自我清理 |
用戶可以中斷自己的進程,但只有root才能終止由其他人擁有的進程。
kill命令根據(jù)ID向進程發(fā)送信號。雖其名稱為kill,但該命令可用于發(fā)送任何信號,而不僅僅是終止程序的信號
[root@lnh ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL10) SIGUSR1 11) SIGSEGV12) SIGUSR213) SIGPIPE14) SIGALRM15) SIGTERM 16) SIGSTKFLT17) SIGCHLD18) SIGCONT19) SIGSTOP20) SIGTSTP 21) SIGTTIN22) SIGTTOU23) SIGURG24) SIGXCPU25) SIGXFSZ 26) SIGVTALRM27) SIGPROF28) SIGWINCH29) SIGIO30) SIGPWR 31) SIGSYS34) SIGRTMIN35) SIGRTMIN+136) SIGRTMIN+237) SIGRTMIN+3 38) SIGRTMIN+439) SIGRTMIN+540) SIGRTMIN+641) SIGRTMIN+742) SIGRTMIN+8 43) SIGRTMIN+944) SIGRTMIN+1045) SIGRTMIN+1146) SIGRTMIN+1247) SIGRTMIN+13 48) SIGRTMIN+1449) SIGRTMIN+1550) SIGRTMAX-1451) SIGRTMAX-1352) SIGRTMAX-12 53) SIGRTMAX-1154) SIGRTMAX-1055) SIGRTMAX-956) SIGRTMAX-857) SIGRTMAX-7 58) SIGRTMAX-659) SIGRTMAX-560) SIGRTMAX-461) SIGRTMAX-362) SIGRTMAX-2 63) SIGRTMAX-164) SIGRTMAX //顯示所有可用的信號 [root@lnh ~]# sleep 22222 ^Z [1]+ Stopped sleep 22222 [root@lnh ~]# sleep 333333 ^Z [2]+ Stopped sleep 333333 [root@lnh ~]# sleep 4444444 ^Z [3]+ Stopped sleep 4444444 [root@lnh ~]# jobs [1] Stopped sleep 22222 [2]- Stopped sleep 333333 [3]+ Stopped sleep 4444444 [root@lnh ~]# bg %1 [1] sleep 22222 & [root@lnh ~]# bg %2 [2]- sleep 333333 & [root@lnh ~]# bg %3 [3]+ sleep 4444444 & [root@lnh ~]# jobs [1] Running sleep 22222 & [2]- Running sleep 333333 & [3]+ Running sleep 4444444 & [root@lnh ~]# ps -efl |grep sleep 0 S root 10438 9955 0 80 0 - 54261 - 04:44 pts/0 00:00:00 sleep 22222 0 S root 10439 9955 0 80 0 - 54261 - 04:44 pts/0 00:00:00 sleep 333333 0 S root 10440 9955 0 80 0 - 54261 - 04:44 pts/0 00:00:00 sleep 4444444 0 S root 10442 9955 0 80 0 - 55475 - 04:44 pts/0 00:00:00 grep --color=auto sleep [root@lnh ~]# killall sleep [1] Terminated sleep 22222 [2]- Terminated sleep 333333 [3]+ Terminated sleep 4444444 [root@lnh ~]# jobs [root@lnh ~]# ps -efl |grep sleep 0 S root 10459 9955 0 80 0 - 55475 - 04:45 pts/0 00:00:00 grep --color=auto sleep //可以查看到,運行的進程都被刪除了
監(jiān)控進程活動
8.1 IO負載
負載平均值代表一段時間內(nèi)感知的系統(tǒng)負載。Linux通過預期服務等待時間的表示來實施平均負載計算。
Linux不僅計算進程數(shù),也作為獨立的任務計算線程數(shù)。運行中線程和等待I/O資源的線程的CPU請求隊列對應于R和D進程狀態(tài)。等待I/O包括處于睡眠而等待預期磁盤和網(wǎng)絡響應的任務。
負載數(shù)屬于全局計數(shù)器計算,是所有CPU的總和數(shù)。由于從睡眠返回的任務可能會重新調(diào)度到不同的CPU,難以精確的每CPU計數(shù),但累計數(shù)的準確度可以保障。顯示的平均負載代表所有的CPU。
[root@lnh ~]# grep 'model name' /proc/cpuinfo model name: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz model name: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz model name: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz model name: Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz //查看cpu核心數(shù),可以看見是四核
一些UNIX系統(tǒng)僅考慮CPU使用率或運行隊列長度來指示系統(tǒng)負載。由于具有空閑CPU的系統(tǒng)可能會因為磁盤或網(wǎng)絡資源忙而遇到很長時間的等待,因此Linux負載平均值中包含了對I/O的考量。遇到負載平均值很高但CPU活動很低時,請檢查磁盤和網(wǎng)絡活動。
Linux中可以使用top、uptime顯示負載平均值的情況。
[root@lnh ~]# uptime 0447 up 2 days, 3:02, 3 users, load average: 0.00, 0.00, 0.00 此處的load average就表示負載平均值,可以查看到此時cpu是空閑的
將顯示的負載平均值除以系統(tǒng)中的邏輯CPU數(shù)。當值低于1表示資源利用率較好,等待時間很短。當值高于1表示資源飽和,而且有一定的服務等待時間。
空閑CPU隊列的負載數(shù)為0。每個就緒和等待的線程使計數(shù)增加1。總隊列數(shù)為1時,資源(CPU、磁盤或網(wǎng)絡)正在使用中,但沒有請求把時間花在等待上。增加的請求數(shù)會累積該計數(shù),但由于許多請求可以在時限內(nèi)處理,資源使用率會很高,而等待時間則不會。
因為磁盤或網(wǎng)絡資源忙碌等待I/O而處于睡眠的進程包含在該計數(shù)內(nèi),而且使負載平均值增大。雖然不能表示CPU使用率,隊列數(shù)依然表明用戶和程序正在等待資源服務。
在資源飽和前,平均負載將保持在1以下,因為幾乎不會在隊列中發(fā)現(xiàn)等待的任務。只有資源飽和導致請求留在排隊狀態(tài)并且被負載計算例程計數(shù)時,負載平均才會增大。當資源使用率接近100%時,每個增加的請求將開始遭遇服務等待時間。
8.2 實時進程監(jiān)控
top用于實現(xiàn)全屏動態(tài)顯示系統(tǒng)信息
//常用選項:
-d //設置延遲時長,top -d 1表示每隔1秒刷新一次,默認每隔5秒刷新
-b //批模式翻屏顯示,默認只實時顯示一屏,若要顯示后面的進程信息則 可使用-b選項,與-n #合用,可指定顯示翻#屏
[root@lnh ~]# top -b -n 1 top - 04:53:59 up 2 days, 3:08, 3 users, load average: 0.00, 0.00, 0.00 Tasks: 163 total, 1 running, 162 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 1.5 sy, 0.0 ni, 98.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 1788.4 total, 980.3 free, 291.9 used, 516.1 buff/cache MiB Swap: 2080.0 total, 2080.0 free, 0.0 used. 1329.2 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 244780 13692 8736 S 0.0 0.7 0:05.96 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.29 kthreadd 3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp 4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp 6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd 9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq 10 root 20 0 0 0 0 S 0.0 0.0 0:00.06 ksoftirqd/0 11 root 20 0 0 0 0 I 0.0 0.0 4:22.56 rcu_sched 12 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 13 root rt 0 0 0 0 S 0.0 0.0 0:00.50 watchdog/0 14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/1 16 root rt 0 0 0 0 S 0.0 0.0 0:00.50 watchdog/1 17 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/1 18 root 20 0 0 0 0 S 0.0 0.0 0:00.44 ksoftirqd/1 20 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/1:0H-kblockd 21 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/2 22 root rt 0 0 0 0 S 0.0 0.0 0:00.30 watchdog/2 23 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/2 24 root 20 0 0 0 0 S 0.0 0.0 0:00.09 ksoftirqd/2 26 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/2:0H 27 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/3 28 root rt 0 0 0 0 S 0.0 0.0 0:00.40 watchdog/3 29 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/3 30 root 20 0 0 0 0 S 0.0 0.0 0:00.26 ksoftirqd/3 32 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/3:0H 34 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kdevtmpfs 35 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns 36 root 20 0 0 0 0 S 0.0 0.0 0:00.02 kauditd 40 root 20 0 0 0 0 S 0.0 0.0 0:00.08 khungtaskd 41 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper 42 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback 43 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0 44 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd 45 root 39 19 0 0 0 S 0.0 0.0 0:01.15 khugepaged 46 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 crypto 47 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd 48 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd 49 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio 50 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 tpm_dev_wq 51 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 md 52 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 edac-poller 53 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdogd 54 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 pm_wq 83 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0 177 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kthrotld 178 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/24-pciehp 179 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/25-pciehp 180 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/26-pciehp 181 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/27-pciehp 182 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/28-pciehp 183 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/29-pciehp 184 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/30-pciehp 185 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/31-pciehp 186 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/32-pciehp 187 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/33-pciehp 188 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/34-pciehp 189 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/35-pciehp 190 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/36-pciehp 191 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/37-pciehp 192 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/38-pciehp 193 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/39-pciehp 194 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/40-pciehp 195 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/41-pciehp 196 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/42-pciehp 197 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/43-pciehp 198 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/44-pciehp 199 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/45-pciehp 200 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/46-pciehp 201 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/47-pciehp 202 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/48-pciehp 203 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/49-pciehp 204 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/50-pciehp 205 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/51-pciehp 206 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/52-pciehp 207 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/53-pciehp 208 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/54-pciehp 209 root -51 0 0 0 0 S 0.0 0.0 0:00.00 irq/55-pciehp 210 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 acpi_thermal_pm 211 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kmpath_rdacd 212 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kaluad 213 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ipv6_addrconf 214 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kstrp 505 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ata_sff 506 root 20 0 0 0 0 S 0.0 0.0 0:00.01 scsi_eh_0 507 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 scsi_tmf_0 508 root 20 0 0 0 0 S 0.0 0.0 0:00.01 scsi_eh_1 509 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mpt_poll_0 510 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 scsi_tmf_1 512 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mpt/0 521 root 20 0 0 0 0 S 0.0 0.0 0:00.00 scsi_eh_2 522 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 scsi_tmf_2 525 root 0 -20 0 0 0 I 0.0 0.0 0:00.36 kworker/0:1H-kblockd 527 root 0 -20 0 0 0 I 0.0 0.0 0:00.89 kworker/3:1H-kblockd 531 root 0 -20 0 0 0 I 0.0 0.0 0:00.25 kworker/1:1H-kblockd 592 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kdmflush 600 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kdmflush 628 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfsalloc 630 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs_mru_cache 633 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-buf/dm-0 634 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-conv/dm-0 636 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-cil/dm-0 637 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-reclaim/dm- 638 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-eofblocks/d 639 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-log/dm-0 640 root 20 0 0 0 0 S 0.0 0.0 0:07.40 xfsaild/dm-0 724 root 0 -20 0 0 0 I 0.0 0.0 0:00.47 kworker/2:1H-xfs-log/dm-0 728 root 20 0 94076 9840 8760 S 0.0 0.5 0:01.24 systemd-journal 755 root 20 0 110188 11088 7620 S 0.0 0.6 0:01.01 systemd-udevd 806 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kdmflush 812 root -51 0 0 0 0 S 0.0 0.0 0:01.51 irq/16-vmwgfx 814 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ttm_swap 831 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-buf/sda1 832 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-conv/sda1 833 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-cil/sda1 834 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-reclaim/sda 835 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-eofblocks/s 836 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-log/sda1 837 root 20 0 0 0 0 S 0.0 0.0 0:00.00 xfsaild/sda1 839 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-buf/dm-2 840 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-conv/dm-2 841 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-cil/dm-2 843 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-reclaim/dm- 844 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-eofblocks/d 845 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 xfs-log/dm-2 846 root 20 0 0 0 0 S 0.0 0.0 0:00.13 xfsaild/dm-2 868 root 16 -4 84184 4424 3672 S 0.0 0.2 0:00.22 auditd 890 polkitd 20 0 1764244 27080 17516 S 0.0 1.5 0:00.30 polkitd 892 root 20 0 124952 5460 4828 S 0.0 0.3 0:09.03 irqbalance 895 dbus 20 0 84888 6072 5272 S 0.0 0.3 0:00.64 dbus-daemon 897 root 20 0 430808 14240 12188 S 0.0 0.8 0:00.45 sssd 899 rngd 20 0 160108 6476 5660 S 0.0 0.4 0:32.28 rngd 909 root 20 0 437568 15188 12412 S 0.0 0.8 0:06.55 sssd_be 910 root 20 0 440960 41164 39428 S 0.0 2.2 0:05.34 sssd_nss 913 root 20 0 508336 40024 18044 S 0.0 2.2 0:00.73 firewalld 914 root 20 0 98788 9780 7128 S 0.0 0.5 0:00.91 systemd-logind 922 root 20 0 601264 18388 16088 S 0.0 1.0 0:12.04 NetworkManager 932 root 20 0 92284 7772 6852 S 0.0 0.4 0:00.05 sshd 935 root 20 0 626344 30744 15440 S 0.0 1.7 0:23.64 tuned 941 root 20 0 251512 2352 1820 S 0.0 0.1 0:00.02 rhsmcertd 947 root 20 0 246684 3704 2840 S 0.0 0.2 0:00.41 crond 949 root 20 0 123016 5540 4648 S 0.0 0.3 0:00.03 login 1468 root 20 0 93892 9700 8304 S 0.0 0.5 0:00.09 systemd 1471 root 20 0 299924 5072 24 S 0.0 0.3 0:00.00 (sd-pam) 1840 root 20 0 236772 4740 3372 S 0.0 0.3 0:00.05 bash 9851 root 20 0 0 0 0 I 0.0 0.0 0:00.25 kworker/u256:2-events_unbound 9949 root 20 0 0 0 0 I 0.0 0.0 0:09.50 kworker/2:1-cgroup_destroy 9950 root 20 0 153356 10252 9000 S 0.0 0.6 0:00.02 sshd 9954 root 20 0 153356 5596 4344 S 0.0 0.3 0:00.52 sshd 9955 root 20 0 237104 5304 3596 S 0.0 0.3 0:00.46 bash 10085 root 20 0 0 0 0 I 0.0 0.0 0:00.43 kworker/1:0-events 10092 root 20 0 153356 10316 9064 S 0.0 0.6 0:00.01 sshd 10096 root 20 0 153356 5500 4248 S 0.0 0.3 0:00.05 sshd 10097 root 20 0 236872 5024 3472 S 0.0 0.3 0:00.04 bash 10169 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/1:2-cgroup_destroy 10187 root 20 0 0 0 0 I 0.0 0.0 0:00.22 kworker/u256:1-events_unbound 10296 root 20 0 0 0 0 I 0.0 0.0 0:04.04 kworker/2:3-events 10385 root 20 0 0 0 0 I 0.0 0.0 0:00.75 kworker/0:0-events 10410 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/3:0-mm_percpu_wq 10460 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/3:1-xfs-sync/dm-0 10461 root 20 0 0 0 0 I 0.0 0.0 0:00.01 kworker/0:2-ata_sff 10464 root 20 0 0 0 0 I 0.0 0.0 0:00.00 kworker/0:1-ata_sff 10465 root 20 0 275164 4480 3904 R 0.0 0.2 0:00.00 top //這個命令存在安全隱患 //直接top查看會一直在運行,所以打印出一頁可以方便查看 load average:0分鐘,0分鐘,0分鐘 load average //CPU隊列中等待運行的任務的個數(shù) cpu(s):多顆CPU平均負載,按1鍵顯示每顆CPU平均負載。 us //表示用戶空間; sy //表示內(nèi)核空間; ni //表示調(diào)整nice值,CPU占用的比率; id //表示空閑百分比; wa //表示等待IO完成所占據(jù)的時間百分比; hi //表示hard interrupt,硬件中斷占據(jù)的時間百分比; si //表示軟中斷占據(jù)的時間百分比; st //表示steal,被虛擬化技術(shù)偷走的時間(比如運行虛擬機) PR //優(yōu)先級 NI //nice值 VIRT //虛擬內(nèi)存集 RES //常駐內(nèi)存集 SHR //共享內(nèi)存大小 S //進程狀態(tài) //top命令交互式子命令: M //根據(jù)駐留內(nèi)存大小進行排序,默認根據(jù)CPU百分比排序 P //根據(jù)CPU使用百分比進行排序 T //根據(jù)累計時間(占據(jù)CPU時長)進行排序 l //是否顯示平均負載和啟動時間 t //是否顯示進程和CPU狀態(tài)相關(guān)信息 m //是否顯示內(nèi)存相關(guān)信息 c //是否顯示完整的命令行信息 q //退出top命令 k //終止某個進程 1 //顯示所有CPU的信息 s //修改刷新時間間隔
使用htop命令這個命令比top安全性高
//Mem內(nèi)存(一共1.75G,已經(jīng)用了302M)
//Swp所屬空間(有2.03G,使用0k)
//Tasks任務一共有29個 現(xiàn)存有17個,一個正在運行
//load average負載均衡0000000
//uptime已經(jīng)運行了2天3個多小時
//PIDPID是程序被操作系統(tǒng)加載到內(nèi)存成為進程后動態(tài)分配的資源,每次程序執(zhí)行時,操作系統(tǒng)都會重新加載,PID在每次加載的時候都是不同的
//USER用戶
//PRI優(yōu)先級
//NI nice值
//VIRT虛擬內(nèi)存集
//RES常駐內(nèi)存集
//S狀態(tài)
//CPU%cpu使用率
//MEM%硬盤使用率
//TIME+運行的時長
//Command 執(zhí)行的命令
F1:幫助
F2:設置
F3:搜索
F4:過濾
F5:生成樹
F6:排序
F7:nice值減
F8:nice加
F9:殺死
F10:退出
作業(yè)
寫出以下描述對應的進程狀態(tài)標志:
描述 | 狀態(tài)標志 |
---|---|
進程已被停止(暫停) | T |
進程已釋放了其所有資源(pid除外) | X |
進程正在CPU上運行或者正在等待于CPU上運行 | R |
進程正處于睡眠狀態(tài),直至滿足某些條件后才會啟動 | S |
進程正在等待I/O或某些條件得到滿足,并且絕對不會影響信號 | D |
并排打開兩個終端窗口,分別稱為左窗口和右窗口
在左窗口中,啟動一個進程,該進程以一秒為間隔持續(xù)向~/outfile文件附加單詞"rock"和一個空格。整個命令集必須包含在括號內(nèi),以便作業(yè)控制可以將該集合解譯為一個作業(yè)
在右窗口中,使用tail確認新進程正在寫入該文件
[root@lnh ~]# tail -f ~/outfile rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock rock ^Z [2]+ Stopped tail -f ~/outfile
4. 4.在左窗口中,使用ctrl+z快捷鍵暫停正在運行的進程。shell將返回作業(yè)ID并用方括號括起。在右窗口中確認進程輸出已經(jīng)停止
5. 在左窗口中,查看jobs列表。+表示當前的作業(yè)。使用bg命令在后臺重新啟動該作業(yè),并再次查看jobs列表,在右窗口中,確認進程輸出再次處于活動狀態(tài)
6. 在左窗口中,再啟動兩個進程,以便向同一輸出文件附加內(nèi)容。將"rock"替換為"paper",再替換為"scissors"。要將進程正確置于后臺,整個命令集必須包含在括號內(nèi),并且以&符號結(jié)尾
[root@lnh ~]# (while true;do echo -n 'paper ' >> ~/outfile;sleep 1;done) & [2] 11945 [root@lnh ~]# (while true;do echo -n 'scissors ' >> ~/outfile;sleep 1;done) &[3] 11975
在左窗口中,檢查jobs,以查看所有三個進程都在運行中。在右窗口中,確認所有三個進程都附加內(nèi)容到文件中
[root@lnh ~]# jobs [1] Running ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) & [2]- Running ( while true; do echo -n 'paper ' >> ~/outfile; sleep 1; done ) & [3]+ Running ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) &
8. 僅使用之前學習的命令,暫停"rock"進程。在左窗口中,使用從jobs列表中確定的作業(yè)ID使作業(yè)進入前臺,然后使用ctrl+z暫停該作業(yè),確認"rock"進程為已停止。在右窗口中,確認"rock"輸出不再活動
[root@lnh ~]# jobs [1] Running ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) & [2]- Running ( while true; do echo -n 'paper ' >> ~/outfile; sleep 1; done ) & [3]+ Running ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) & [root@lnh ~]# fg %1 ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) ^Z [1]+ Stopped ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) [root@lnh ~]# jobs [1]+ Stopped ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) [2] Running ( while true; do echo -n 'paper ' >> ~/outfile; sleep 1; done ) & [3]- Running ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) &
9. 終止"paper"進程。在左窗口中,使作業(yè)進入前臺,然后使用ctrl+c終止該作業(yè),確認"paper"進程已經(jīng)消失。在右窗口中,確認"paper"輸出不再活動
[root@lnh ~]# fg %2 ( while true; do echo -n 'paper ' >> ~/outfile; sleep 1; done ) ^C [root@lnh ~]# jobs [1]+ Stopped ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) [3]- Running ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) &
10. 在左窗口中,使用ps查看剩余的作業(yè)。暫停中的作業(yè)具有狀態(tài)T標志。其他后臺作業(yè)為睡眠中(S),因為ps在顯示時處于"CPU上"(R)
[root@lnh ~]# ps j PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND 949 1840 1840 1840 tty1 1840 Ss+ 0 0:00 -bash 10839 10840 10840 10840 pts/1 13291 Ss 0 0:00 -bash 11103 11104 11104 11104 pts/3 11713 Ss 0 0:00 -bash 11104 11184 11184 11104 pts/3 11713 T 0 0:00 sleep 2222 10840 11203 11203 10840 pts/1 13291 T 0 0:00 -bash 11104 11470 11470 11104 pts/3 11713 T 0 0:00 tail -f /r 11104 11713 11713 11104 pts/3 11713 S+ 0 0:00 tail -f /r 10840 11975 11975 10840 pts/1 13291 S 0 0:00 -bash 11203 12781 11203 10840 pts/1 13291 T 0 0:00 sleep 1 11975 13290 11975 10840 pts/1 13291 S 0 0:00 sleep 1 10840 13291 13291 10840 pts/1 13291 R+ 0 0:00 ps j
停止剩余的兩個作業(yè)。在左窗口中,使其中一個作業(yè)進入前臺。使用ctrl+c將其終止,對剩余的作業(yè)重復此操作。停止的作業(yè)在前入前臺時會臨時重新啟動。確認沒有剩余的作業(yè),輸出也已停止。
[root@lnh ~]# jobs [1]+ Stopped ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) [3]- Running ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) & [root@lnh ~]# fg %1 ( while true; do echo -n 'rock ' >> ~/outfile; sleep 1; done ) ^C [root@lnh ~]# fg %3 ( while true; do echo -n 'scissors ' >> ~/outfile; sleep 1; done ) ^C [root@lnh ~]# jobs [root@lnh ~]#
在右窗口中,停止tail命令。關(guān)閉多余的終端窗口
-
監(jiān)控
+關(guān)注
關(guān)注
6文章
2312瀏覽量
57109 -
Linux
+關(guān)注
關(guān)注
87文章
11496瀏覽量
213259
原文標題:深入Linux進程管理:提升效率與穩(wěn)定性的關(guān)鍵方法
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
是德頻譜分析儀對微波信號頻率穩(wěn)定性的測量與分析

HarmonyOS官網(wǎng)上線“穩(wěn)定性”專欄 助力更穩(wěn)定流暢的鴻蒙原生應用開發(fā)
旋轉(zhuǎn)測徑儀的底座如何保證穩(wěn)定性?
庫存平臺穩(wěn)定性建設實踐

是德34460A萬用表的測量穩(wěn)定性提升

如何測試DDR內(nèi)存的穩(wěn)定性
buck電路的穩(wěn)定性分析方法
住宅靜態(tài)IP:提升家庭網(wǎng)絡穩(wěn)定性的關(guān)鍵
穩(wěn)定性建設之變更管理

鳳凰動力舵輪驅(qū)動輪的穩(wěn)定性如何影響AGV的運行效率和穩(wěn)定性

評論