一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2024-11-22 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄

Linux進(jìn)程管理

8.1 IO負(fù)載

8.2 實(shí)時(shí)進(jìn)程監(jiān)控

5.1 作業(yè)與會(huì)話

5.2 作業(yè)分類

4.1 ps

4.2pstree

4.3pgrep

4.4pidof

4.5 vmstat

3.1Linux進(jìn)程調(diào)度與多任務(wù)

3.2進(jìn)程優(yōu)先級(jí)

3.3相對(duì)優(yōu)先級(jí)

3.4nice級(jí)別與權(quán)限

3.5進(jìn)程優(yōu)先級(jí)調(diào)整

1.1進(jìn)程的組成部分

1.2進(jìn)程的環(huán)境

1.3進(jìn)程的產(chǎn)生

1.4進(jìn)程的分類

1.進(jìn)程基本概述

2.進(jìn)程狀態(tài)

3.進(jìn)程優(yōu)先級(jí)

4.進(jìn)程命令

5. 控制作業(yè)

6.進(jìn)程間通信

7.使用信號(hào)控制進(jìn)程

監(jiān)控進(jìn)程活動(dòng)

作業(yè)

1.進(jìn)程基本概述

進(jìn)程是已啟動(dòng)的可執(zhí)行程序的運(yùn)行中實(shí)例。

/proc目錄下以數(shù)字為名的目錄,每一個(gè)目錄代表一個(gè)進(jìn)程,保存著進(jìn)程的屬性信息。每一個(gè)進(jìn)程的PID是唯一的,就算進(jìn)程退出了,其它進(jìn)程也不會(huì)占用其PID。

1.1進(jìn)程的組成部分

1.1.1 已分配內(nèi)存的地址空間
1.1.2 安全屬性,包括所有權(quán)憑據(jù)和特權(quán)
1.1.3 程序代碼的一個(gè)或多個(gè)執(zhí)行線程
1.1.4 進(jìn)程狀態(tài)

1.2進(jìn)程的環(huán)境

1.2.1 本地和全局變量
1.2.2 當(dāng)前調(diào)度上下文
1.2.3 分配的系統(tǒng)資源,如文件描述符和網(wǎng)絡(luò)端口

1.3進(jìn)程的產(chǎn)生

現(xiàn)有的(父)進(jìn)程復(fù)制自己的地址空間(fork)來(lái)創(chuàng)建一個(gè)新的(子)進(jìn)程結(jié)構(gòu)。
每個(gè)新進(jìn)程分配有一個(gè)唯一的進(jìn)程ID(PID),滿足跟蹤和安全性之需。PID與父進(jìn)程ID(PPID)是新進(jìn)程環(huán)境的元素。
任何進(jìn)程可創(chuàng)建子進(jìn)程。所有進(jìn)程都是第一個(gè)系統(tǒng)進(jìn)程的后代。RHEL7上,第一個(gè)系統(tǒng)進(jìn)程是systemd。

be43ef2e-a1c0-11ef-93f3-92fbcf53809c.png


通過(guò)fork例程,子進(jìn)程繼承安全性身份、過(guò)去和當(dāng)前的文件描述符、端口和資源特權(quán)、環(huán)境變量,以及程序代碼。隨后,子進(jìn)程可能exec其自己的程序代碼。通常,父進(jìn)程在子進(jìn)程運(yùn)行期間處于睡眠狀態(tài),設(shè)置一個(gè)在子進(jìn)程完成時(shí)發(fā)出信號(hào)的請(qǐng)求(wait)。在退出時(shí),子進(jìn)程可能已經(jīng)關(guān)閉或丟棄了其資源和環(huán)境,剩余的部分被稱作僵停。父進(jìn)程在子進(jìn)程退出時(shí)收到信號(hào)而被喚醒,清理剩余結(jié)構(gòu),然后繼續(xù)執(zhí)行其自己的程序代碼。

1.4進(jìn)程的分類

1.4.1 前臺(tái)進(jìn)程:與終端相關(guān)的進(jìn)程,通過(guò)終端啟動(dòng)的進(jìn)程
注意:也可把在前臺(tái)啟動(dòng)的進(jìn)程送往后臺(tái),以守護(hù)模式運(yùn)行
1.4.2 守護(hù)進(jìn)程:daemon,與終端無(wú)關(guān)的進(jìn)程(如內(nèi)核),在系統(tǒng)引導(dǎo)過(guò)程中啟動(dòng)的進(jìn)程

2.進(jìn)程狀態(tài)

be5eb106-a1c0-11ef-93f3-92fbcf53809c.png

Excuting 運(yùn)行態(tài)
Ready 就緒態(tài),也可以稱作睡眠態(tài)
Uninterruptible sleep 不可中斷的睡眠。不可隨時(shí)喚醒,只有當(dāng)IO資源加載成功后才能喚醒
Interruptible sleep 可中斷的睡眠??呻S時(shí)喚醒
Zombie 僵尸進(jìn)程。正常運(yùn)行結(jié)束了,但是不釋放占據(jù)的內(nèi)存
Stopped 停止態(tài),暫停于內(nèi)存中,但不會(huì)被調(diào)度,除非手動(dòng)啟動(dòng)之

進(jìn)程睡眠的原因:
當(dāng)一個(gè)執(zhí)行中的進(jìn)程,需要加載額外的IO資源的時(shí)候,由于IO設(shè)備的速度太慢,所以會(huì)轉(zhuǎn)入睡眠狀態(tài)等待,交出CPU給其他進(jìn)程,以免浪費(fèi)剩余執(zhí)行時(shí)間

Linux進(jìn)程狀態(tài)

標(biāo)志 內(nèi)核定義的狀態(tài)名稱和描述
R TASK_RUNNING:進(jìn)程正在CPU上執(zhí)行,或者正在等待運(yùn)行。處于運(yùn)行中(或可運(yùn)行)狀態(tài)時(shí),進(jìn)程可能正在執(zhí)行用戶例程或內(nèi)核例程(系統(tǒng)調(diào)用),或者已排隊(duì)并就緒
S TASK_INTERRUPTIBLE:進(jìn)程處于睡眠狀態(tài)且正在等待某一條件:硬件請(qǐng)求、系統(tǒng)資源訪問(wèn)或信號(hào)。當(dāng)事件或信號(hào)滿足該條件時(shí),該進(jìn)程將返回到運(yùn)行中
D TASK_UNINTERRUPTIBLE:此進(jìn)程也在睡眠,但與S狀態(tài)不同,不會(huì)響應(yīng)傳遞的信號(hào)。僅在特定的條件下使用,其中進(jìn)程中斷可能會(huì)導(dǎo)致意外的設(shè)備狀態(tài)
K TASK_KILLABLE:進(jìn)程處于睡眠狀態(tài),與不可中斷的D狀態(tài)相同,但有所修改,允許等待中的任務(wù)通過(guò)響應(yīng)信號(hào)而被中斷(徹底退出)。實(shí)用程序通常將可中斷的進(jìn)程顯示為D狀態(tài)
T TASK_STOPPED:進(jìn)程已被停止(暫停),通常是通過(guò)用戶或其他進(jìn)程發(fā)出的信號(hào)。進(jìn)程可以通過(guò)另一信號(hào)返回到運(yùn)行中狀態(tài),繼續(xù)執(zhí)行(恢復(fù))
T TASK_TRACED:正在被調(diào)試的進(jìn)程也會(huì)臨時(shí)停止,并且共享同一個(gè)T狀態(tài)標(biāo)志
Z EXIT_ZOMBIE:子進(jìn)程在退出時(shí)向父進(jìn)程發(fā)出信號(hào)。除進(jìn)程身份(PID)之外的所有資源都已釋放
X EXIT_DEAD:當(dāng)父進(jìn)程清理(獲?。┦S嗟淖舆M(jìn)程結(jié)構(gòu)時(shí),進(jìn)程現(xiàn)在已徹底釋放。此狀態(tài)從不會(huì)在進(jìn)程列出實(shí)用程序中看到
< 高優(yōu)先級(jí)進(jìn)程
N 低優(yōu)先級(jí)進(jìn)程
+ 前臺(tái)進(jìn)程組中的進(jìn)程
l 多線程進(jìn)程
s 會(huì)話進(jìn)程首進(jìn)程

3.進(jìn)程優(yōu)先級(jí)

3.1Linux進(jìn)程調(diào)度與多任務(wù)

3.1.1 現(xiàn)代計(jì)算機(jī)系統(tǒng)中既包含每次只能執(zhí)行一個(gè)指令的低端處理器,也包含高性能超級(jí)計(jì)算機(jī),這些超級(jí)計(jì)算機(jī)每臺(tái)配備數(shù)百個(gè)CPU,每個(gè)CPU上具有多個(gè)核心,它們可以并行執(zhí)行數(shù)以百計(jì)的指令。但是所有這些系統(tǒng)往往具有一個(gè)共同點(diǎn):它們需要運(yùn)行的進(jìn)程數(shù)量總是超出實(shí)際具有的核心數(shù)。

3.1.2 通過(guò)時(shí)間分片技術(shù),Linux(和其他操作系統(tǒng))實(shí)際能夠運(yùn)行的進(jìn)程數(shù)(和線程數(shù))可以超出可用的實(shí)際處理單元數(shù)。操作系統(tǒng)進(jìn)程調(diào)度程序?qū)⒃趩蝹€(gè)核心上的進(jìn)程之間進(jìn)行快速切換,從而給用戶一種有多個(gè)進(jìn)程在同時(shí)運(yùn)行的印象。

3.1.3 執(zhí)行此切換的Linux內(nèi)核部分稱為進(jìn)程調(diào)度程序。

3.2進(jìn)程優(yōu)先級(jí)

進(jìn)程優(yōu)先級(jí)范圍:0-139,數(shù)字越小,優(yōu)先級(jí)越高
0-99:實(shí)時(shí)優(yōu)先級(jí),內(nèi)核調(diào)整
100-139:靜態(tài)優(yōu)先級(jí),用戶可控制
進(jìn)程優(yōu)先級(jí)高的特點(diǎn):
獲得更多的CPU運(yùn)行時(shí)間
更優(yōu)先獲得CPU運(yùn)行的機(jī)會(huì)
要修改進(jìn)程的優(yōu)先級(jí)可以通過(guò)調(diào)整進(jìn)程的nice值來(lái)實(shí)現(xiàn),nice值越小,優(yōu)先級(jí)越高:
nice值的范圍是(-20,19),-20對(duì)應(yīng)100,19對(duì)應(yīng)139

3.3相對(duì)優(yōu)先級(jí)

3.3.1 由于不是每種進(jìn)程都與其他進(jìn)程同樣重要,可告知調(diào)度程序?yàn)椴煌倪M(jìn)程使用不同的調(diào)度策略。常規(guī)系統(tǒng)上運(yùn)行的大多數(shù)進(jìn)程所使用的調(diào)度策略稱為SCHED_OTHER(也稱為SCHED_NORMAL),但還有一些其他策略可用于不同的目的。

3.3.2 由于并非所有進(jìn)程都以同樣的方式創(chuàng)建,可為采用SCHED_NORMAL策略運(yùn)行的進(jìn)程指定相對(duì)優(yōu)先級(jí)。此優(yōu)先級(jí)稱為進(jìn)程的nice值。一個(gè)進(jìn)程可以有40種不同級(jí)別的nice值。

3.3.3 這些nice級(jí)別的范圍是從-20到19。默認(rèn)情況下,進(jìn)程將繼承其父進(jìn)程的nice級(jí)別,通常為0

nice級(jí)別越高,表示優(yōu)先級(jí)越低(該進(jìn)程容易將其CPU使用量讓給其他進(jìn)程)
nice級(jí)別越低,表示優(yōu)先級(jí)越高(該進(jìn)程更加不傾向于讓出CPU)
如果不存在資源爭(zhēng)用(例如當(dāng)活動(dòng)進(jìn)程數(shù)少于可用CPU核心數(shù)時(shí)),即使nice級(jí)別高的進(jìn)程也將仍使用它們可使用的所有可用CPU資源。但當(dāng)請(qǐng)求CPU時(shí)間的進(jìn)程數(shù)超過(guò)可用核心數(shù)時(shí),nice級(jí)別較高的進(jìn)程將比nice級(jí)別較低的進(jìn)程收到更少的CPU時(shí)間

3.4nice級(jí)別與權(quán)限

為很占CPU資源的進(jìn)程設(shè)置較低的nice級(jí)別可能會(huì)對(duì)同一系統(tǒng)上運(yùn)行的其他進(jìn)程的性能造成負(fù)面影響,所以僅允許root用戶設(shè)置負(fù)nice級(jí)別以及降低現(xiàn)有進(jìn)程的nice級(jí)別。
普通非特權(quán)用戶僅允許設(shè)置正的nice級(jí)別。只能對(duì)現(xiàn)有進(jìn)程提升nice級(jí)別,而不能降低nice級(jí)別。

3.5進(jìn)程優(yōu)先級(jí)調(diào)整

進(jìn)程優(yōu)先級(jí)調(diào)整:調(diào)整nice值
//調(diào)整已經(jīng)啟動(dòng)的進(jìn)程的nice值:
renice NI PID(例:renice 3 3704)
//在啟動(dòng)時(shí)指定nice值:(-20,19)
nice -n NI COMMAND

[root@lnh ~]# sleep 50000
//在另一個(gè)終端執(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.進(jìn)程命令

Linux系統(tǒng)各進(jìn)程的相關(guān)信息均保存在/proc/PID目錄下的各文件中

4.1 ps

ps(process state)命令用于列出當(dāng)前的進(jìn)程??梢燥@示詳細(xì)的進(jìn)程信息,包括:

1.1 用戶識(shí)別符(UID),它確定進(jìn)程的特權(quán)
1.2 唯一進(jìn)程識(shí)別符(PID)
1.3 CPU和已經(jīng)花費(fèi)的實(shí)時(shí)時(shí)間
1.4 進(jìn)程在各種位置上分配的內(nèi)存數(shù)量
1.5 進(jìn)程的位置STDOUT,稱為控制終端
1.6 當(dāng)前的進(jìn)程狀態(tài)
2. ps支持三種選項(xiàng)格式:

2.1 UNIX(POSIX)選項(xiàng),可以分組但必須以連字符開(kāi)頭
2.2 BSD 選項(xiàng),可以分組但不可與連字符同用
2.3 GNU 長(zhǎng)選項(xiàng),以雙連字符開(kāi)頭
3. ps(process state),顯示進(jìn)程信息。注意事項(xiàng):

3.1 加了[]中括號(hào)的,表示內(nèi)核線程,通常位于頂部
3.2 exiting或defunct表示僵尸進(jìn)程
4. 常用選項(xiàng)
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)的進(jìn)程,u顯示進(jìn)程是由哪個(gè)用戶啟動(dòng)的,x顯示所有與終端無(wú)關(guān)的進(jìn)程
//USER:用戶 PID:進(jìn)程id %CPU:CPU使用率 %MEM:內(nèi)存使用率 VSZ:虛擬內(nèi)存集
RSS:常駐內(nèi)存集 TTY:在哪里登錄的(?開(kāi)機(jī)自啟,遠(yuǎn)程連上去敲的命令是有位置的eg:pts/2) STAT:進(jìn)程狀態(tài) TIME:運(yùn)行時(shí)的累積時(shí)長(zhǎng) START:啟動(dòng)時(shí)間 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顯示所有進(jìn)程,與-A效果相同,-l以長(zhǎng)格式顯示
[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顯示所有進(jìn)程,與-A效果相同,-l以長(zhǎng)格式顯示,-f顯示更詳細(xì)的完整格式的進(jìn)程信息.  顯示全部信息
[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顯示詳細(xì)信息
[root@lnh ~]# ps -H 
    PID TTY          TIME CMD
   9955 pts/0    00:00:00 bash
  10185 pts/0    00:00:00   ps
  //-H以進(jìn)程層級(jí)格式顯示進(jìn)程相關(guān)信息
[root@lnh ~]# ps -o pid,comm,ni
    PID COMMAND          NI
   9955 bash              0
  10196 ps                0
//表示只顯示進(jìn)程號(hào),命令,nice值三個(gè)字段

4.2pstree

pstree用于顯示當(dāng)前系統(tǒng)上的進(jìn)程樹(shù)
Linux由2棵樹(shù)組成:

進(jìn)程樹(shù)

文件系統(tǒng)掛載樹(shù)

[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風(fēng)格指定只顯示哪些進(jìn)程,在當(dāng)前系統(tǒng)中找符合某些特性的進(jìn)程。只顯示進(jìn)程號(hào)

[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的詳細(xì)信息

4.4pidof

根據(jù)進(jìn)程名查找其PID號(hào)

[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)進(jìn)程 r:正在運(yùn)行的進(jìn)程個(gè)數(shù).b:睡眠狀態(tài) memory內(nèi)存   cache:緩存 buff:緩沖 free:可以用的剩余空間 swpd:交換空間(用了多少)  swap:交換空間(換進(jìn)換出的數(shù)量)當(dāng)你的物理內(nèi)存就是真實(shí)內(nèi)存不夠用的時(shí)候,把硬盤的空間拿一部分出來(lái)當(dāng)一個(gè)假內(nèi)存(不能真正運(yùn)行)臨時(shí)作一個(gè)緩沖點(diǎn),可以把真實(shí)內(nèi)存里面不經(jīng)常用的可以放進(jìn)這個(gè)假內(nèi)存里面,讓多的空間讓其他東西去運(yùn)行,運(yùn)行速度還是比硬盤快swap si so就是這個(gè)過(guò)程,在假內(nèi)存的角度   io硬盤 bi:調(diào)入bo:調(diào)出 在內(nèi)存的角度   in:可中斷睡眠
cs:上下文切換(把進(jìn)程調(diào)入內(nèi)存里面運(yùn)行然后又調(diào)出去)數(shù)值特別大的時(shí)候可以通過(guò)加cpu的方式解決  us:用戶空間,用戶可以查找的位置 sy:內(nèi)核空間  

procs:
r(running) //表示等待運(yùn)行的隊(duì)列長(zhǎng)度,也即等待運(yùn)行的進(jìn)程的個(gè)數(shù)
b(block) //表示阻塞隊(duì)列長(zhǎng)度,也即處于不可中斷睡眠態(tài)的進(jìn)程個(gè)數(shù)
memory:
swpd //交換內(nèi)存的使用總量
free //空閑物理內(nèi)存總量
buffer //用于buffer的內(nèi)存總量
cache //用于cache的內(nèi)存總量
swap:
si(swap in) //表示從物理內(nèi)存有多少頁(yè)面換進(jìn)swap,也即數(shù)據(jù)進(jìn)入swap的數(shù)據(jù)速率(kb/s)
so(swap out) //表示從swap有多少頁(yè)面換進(jìn)物理內(nèi)存,也即數(shù)據(jù)離開(kāi)swap的數(shù)據(jù)速率(kb/s)
io:
bi(block in) //表示磁盤塊有多少個(gè)被調(diào)入內(nèi)存中,也即從塊設(shè)備讀入數(shù)據(jù)到系統(tǒng)的速率(kb/s)
bo(block out) //表示有多少個(gè)磁盤塊從內(nèi)存中被同步到硬盤上去了,也即保存數(shù)據(jù)至塊設(shè)備的速率(kb/s)
system:
in( interrupts) //表示中斷的個(gè)數(shù),也即中斷速率(kb/s)
cs(context switch) //表示上下文切換的次數(shù),也即進(jìn)程切換速率(kb/s)
CPU:
us //表示用戶空間
sy //表示內(nèi)核空間
id //表示空閑百分比
wa //表示等待IO完成所占據(jù)的時(shí)間百分比
st //表示steal,被虛擬化技術(shù)偷走的時(shí)間(比如運(yùn)行虛擬機(jī))

5. 控制作業(yè)

5.1 作業(yè)與會(huì)話

作業(yè)控制是shell的一種功能,它允許單個(gè)shell實(shí)例運(yùn)行和管理多個(gè)命令。

作業(yè)與在shell提示符中輸入的每個(gè)管道相關(guān)聯(lián)。該管道中的所有進(jìn)程均是作業(yè)的一部分,并且是同一個(gè)進(jìn)程組的成員。(如果在shell提示符中僅輸入了一條命令,則這條命令可視為命令的最小管道。該命令將是該作業(yè)的唯一成員)

一次只能有一個(gè)作業(yè)從特定終端窗口讀取輸入和鍵盤生成的信號(hào)。屬于該作業(yè)的進(jìn)程是該控制終端的前臺(tái)進(jìn)程。

該控制終端的后臺(tái)進(jìn)程是與該終端相關(guān)聯(lián)的任何其他作業(yè)的成員。終端的后臺(tái)進(jìn)程無(wú)法從終端讀取輸入或接收鍵盤生成的中斷,但可以寫入終端。后臺(tái)中的作業(yè)可能已停止(暫停),也可能正在運(yùn)行。如果某個(gè)正在運(yùn)行的后臺(tái)作業(yè)嘗試從終端讀取內(nèi)容,則該作業(yè)將自動(dòng)暫停。

每個(gè)終端是其自身的會(huì)話,并且可以具有一個(gè)前臺(tái)進(jìn)程和多個(gè)獨(dú)立的后臺(tái)進(jìn)程。一個(gè)作業(yè)只能屬于一個(gè)會(huì)話,也就是屬于其控制終端的會(huì)話。

[root@lnh ~]# sleep 5000
^Z
[1]+  Stopped                 sleep 5000
[root@lnh ~]# jobs 
[1]+  Stopped                 sleep 5000
//一個(gè)作業(yè)只能屬于一個(gè)會(huì)話,這個(gè)里面是ctrl+z將作業(yè)放進(jìn)后臺(tái)了,然后jobs查看出來(lái)

5.2 作業(yè)分類

Linux作業(yè)分為前臺(tái)作業(yè)與后臺(tái)作業(yè)兩種。其各自的特點(diǎn)如下:

前臺(tái)作業(yè):通過(guò)終端啟動(dòng),且啟動(dòng)后一直占據(jù)了命令提示符
后臺(tái)作業(yè):可以通過(guò)終端啟動(dòng),但啟動(dòng)之后,釋放命令提示符,后續(xù)的操作在后臺(tái)完成
此類作業(yè)雖然被送往后臺(tái)運(yùn)行,但其依然與終端相關(guān)。如果希望送往后臺(tái)后,剝離與終端的關(guān)系需要執(zhí)行(nohup COMMAND &)

[root@lnh ~]# fg
sleep 5000  //前臺(tái)命令
^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
//不會(huì)顯示進(jìn)程
[root@lnh ~]# sleep 5000 &
[1] 10309 //在后臺(tái)運(yùn)行
[root@lnh ~]# jobs 
[1]+  Running                 sleep 5000 & //可以看見(jiàn)作業(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
//可以查看到進(jìn)程
[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
//在另外一個(gè)終端也可以查看到進(jìn)行,如果把原來(lái)有后臺(tái)作業(yè)的那個(gè)終端關(guān)閉了在這里是查看不到進(jìn)程的
[root@lnh ~]# fg
sleep 5000   //可以將后臺(tái)的作業(yè)調(diào)入前臺(tái)
^C   //終止
//當(dāng)只有一個(gè)后臺(tái)作業(yè)時(shí),直接使用fg命令,不跟任何參數(shù)即可將后臺(tái)作業(yè)調(diào)至前臺(tái)運(yùn)行
[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
//當(dāng)有多個(gè)作業(yè)時(shí)則必須跟上%+作業(yè)號(hào),也就是上面命令執(zhí)行結(jié)果中以[]括起來(lái)的數(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可將前臺(tái)進(jìn)程發(fā)送到后臺(tái),此時(shí)作業(yè)將處于停止?fàn)顟B(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è)號(hào)可使后臺(tái)已停止的作業(yè)重新運(yùn)行
[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è)號(hào)可以手動(dòng)殺死指定作業(yè)
//jobs命令的結(jié)果中
// +  命令將默認(rèn)操作的作業(yè)
// -  命令將第二個(gè)默認(rèn)操作的作業(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 [選項(xiàng)]  name  刪除全部進(jìn)程
[root@lnh ~]# killall sleep 
[1]-  Terminated              sleep 33333
[2]+  Terminated              sleep 4444444
[root@lnh ~]# jobs
[root@lnh ~]# 
//直接全部刪除進(jìn)程

6.進(jìn)程間通信

進(jìn)程間通信(IPC:Inter Process Communication)

進(jìn)程間通信方式:

同一主機(jī)
共享內(nèi)存
信號(hào):Signal
不同主機(jī)
rpc:remote procecure call
基于socket實(shí)現(xiàn)進(jìn)程間通信

7.使用信號(hào)控制進(jìn)程

信號(hào)是傳遞至進(jìn)程的軟件中斷。信號(hào)向執(zhí)行中的程序報(bào)告事件。生成信號(hào)的事件可以是錯(cuò)誤或外部事件(如I/O請(qǐng)求或計(jì)時(shí)器過(guò)期),或者來(lái)自于明確請(qǐng)求(如使用信號(hào)發(fā)送命令)

下表列出了系統(tǒng)管理員用于日常進(jìn)程管理的基本信號(hào)。請(qǐng)通過(guò)短名稱(HUP)或正確名稱(SIGHUP)指代信號(hào)。

指定一個(gè)信號(hào)的方法:
信號(hào)號(hào)碼(數(shù)字標(biāo)識(shí)):kill -1
信號(hào)完整名稱:kill -SIGKILL
信號(hào)簡(jiǎn)寫名稱:kill -TERM或kill -KILL或kill -INT或kill -HUP
基本進(jìn)程管理信號(hào):

信號(hào)編號(hào)ID 短名稱 定義 用途
1 HUP 掛起 讓一個(gè)進(jìn)程不用重啟就可以重讀配置文件,并讓新的配置信息生效
2 INT 鍵盤中斷 中斷一個(gè)前臺(tái)進(jìn)程。ctrl+c就是用的SIGINT信號(hào)
9 KILL 中斷,無(wú)法攔截 導(dǎo)致立即終止程序。無(wú)法被攔截、忽略或處理
15默認(rèn)值 TERM 終止 導(dǎo)致程序終止。和SIGKILL不同,可以被攔截、忽略或處理。要求程序終止的友好方式,允許自我清理

用戶可以中斷自己的進(jìn)程,但只有root才能終止由其他人擁有的進(jìn)程。

kill命令根據(jù)ID向進(jìn)程發(fā)送信號(hào)。雖其名稱為kill,但該命令可用于發(fā)送任何信號(hào),而不僅僅是終止程序的信號(hào)

[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
//顯示所有可用的信號(hào)
[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
//可以查看到,運(yùn)行的進(jìn)程都被刪除了

監(jiān)控進(jìn)程活動(dòng)

8.1 IO負(fù)載

負(fù)載平均值代表一段時(shí)間內(nèi)感知的系統(tǒng)負(fù)載。Linux通過(guò)預(yù)期服務(wù)等待時(shí)間的表示來(lái)實(shí)施平均負(fù)載計(jì)算。

Linux不僅計(jì)算進(jìn)程數(shù),也作為獨(dú)立的任務(wù)計(jì)算線程數(shù)。運(yùn)行中線程和等待I/O資源的線程的CPU請(qǐng)求隊(duì)列對(duì)應(yīng)于R和D進(jìn)程狀態(tài)。等待I/O包括處于睡眠而等待預(yù)期磁盤和網(wǎng)絡(luò)響應(yīng)的任務(wù)。

負(fù)載數(shù)屬于全局計(jì)數(shù)器計(jì)算,是所有CPU的總和數(shù)。由于從睡眠返回的任務(wù)可能會(huì)重新調(diào)度到不同的CPU,難以精確的每CPU計(jì)數(shù),但累計(jì)數(shù)的準(zhǔn)確度可以保障。顯示的平均負(fù)載代表所有的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ù),可以看見(jiàn)是四核

一些UNIX系統(tǒng)僅考慮CPU使用率或運(yùn)行隊(duì)列長(zhǎng)度來(lái)指示系統(tǒng)負(fù)載。由于具有空閑CPU的系統(tǒng)可能會(huì)因?yàn)榇疟P或網(wǎng)絡(luò)資源忙而遇到很長(zhǎng)時(shí)間的等待,因此Linux負(fù)載平均值中包含了對(duì)I/O的考量。遇到負(fù)載平均值很高但CPU活動(dòng)很低時(shí),請(qǐng)檢查磁盤和網(wǎng)絡(luò)活動(dòng)。

Linux中可以使用top、uptime顯示負(fù)載平均值的情況。

[root@lnh ~]# uptime 
 0447 up 2 days,  3:02,  3 users,  load average: 0.00, 0.00, 0.00
此處的load average就表示負(fù)載平均值,可以查看到此時(shí)cpu是空閑的

將顯示的負(fù)載平均值除以系統(tǒng)中的邏輯CPU數(shù)。當(dāng)值低于1表示資源利用率較好,等待時(shí)間很短。當(dāng)值高于1表示資源飽和,而且有一定的服務(wù)等待時(shí)間。

空閑CPU隊(duì)列的負(fù)載數(shù)為0。每個(gè)就緒和等待的線程使計(jì)數(shù)增加1??傟?duì)列數(shù)為1時(shí),資源(CPU、磁盤或網(wǎng)絡(luò))正在使用中,但沒(méi)有請(qǐng)求把時(shí)間花在等待上。增加的請(qǐng)求數(shù)會(huì)累積該計(jì)數(shù),但由于許多請(qǐng)求可以在時(shí)限內(nèi)處理,資源使用率會(huì)很高,而等待時(shí)間則不會(huì)。

因?yàn)榇疟P或網(wǎng)絡(luò)資源忙碌等待I/O而處于睡眠的進(jìn)程包含在該計(jì)數(shù)內(nèi),而且使負(fù)載平均值增大。雖然不能表示CPU使用率,隊(duì)列數(shù)依然表明用戶和程序正在等待資源服務(wù)。

在資源飽和前,平均負(fù)載將保持在1以下,因?yàn)閹缀醪粫?huì)在隊(duì)列中發(fā)現(xiàn)等待的任務(wù)。只有資源飽和導(dǎo)致請(qǐng)求留在排隊(duì)狀態(tài)并且被負(fù)載計(jì)算例程計(jì)數(shù)時(shí),負(fù)載平均才會(huì)增大。當(dāng)資源使用率接近100%時(shí),每個(gè)增加的請(qǐng)求將開(kāi)始遭遇服務(wù)等待時(shí)間。

8.2 實(shí)時(shí)進(jìn)程監(jiān)控

top用于實(shí)現(xiàn)全屏動(dòng)態(tài)顯示系統(tǒng)信息
//常用選項(xiàng):
-d //設(shè)置延遲時(shí)長(zhǎng),top -d 1表示每隔1秒刷新一次,默認(rèn)每隔5秒刷新
-b //批模式翻屏顯示,默認(rèn)只實(shí)時(shí)顯示一屏,若要顯示后面的進(jìn)程信息則 可使用-b選項(xiàng),與-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
//這個(gè)命令存在安全隱患
//直接top查看會(huì)一直在運(yùn)行,所以打印出一頁(yè)可以方便查看
load average:0分鐘,0分鐘,0分鐘
    load average    //CPU隊(duì)列中等待運(yùn)行的任務(wù)的個(gè)數(shù)
cpu(s):多顆CPU平均負(fù)載,按1鍵顯示每顆CPU平均負(fù)載。
    us  //表示用戶空間;
    sy  //表示內(nèi)核空間;
    ni  //表示調(diào)整nice值,CPU占用的比率;
    id  //表示空閑百分比;
    wa  //表示等待IO完成所占據(jù)的時(shí)間百分比;
    hi  //表示hard interrupt,硬件中斷占據(jù)的時(shí)間百分比;
    si  //表示軟中斷占據(jù)的時(shí)間百分比;
    st  //表示steal,被虛擬化技術(shù)偷走的時(shí)間(比如運(yùn)行虛擬機(jī))
PR      //優(yōu)先級(jí)
NI      //nice值
VIRT    //虛擬內(nèi)存集
RES     //常駐內(nèi)存集
SHR     //共享內(nèi)存大小
S       //進(jìn)程狀態(tài)


//top命令交互式子命令:
    M   //根據(jù)駐留內(nèi)存大小進(jìn)行排序,默認(rèn)根據(jù)CPU百分比排序
    P   //根據(jù)CPU使用百分比進(jìn)行排序
    T   //根據(jù)累計(jì)時(shí)間(占據(jù)CPU時(shí)長(zhǎng))進(jìn)行排序
    l   //是否顯示平均負(fù)載和啟動(dòng)時(shí)間
    t   //是否顯示進(jìn)程和CPU狀態(tài)相關(guān)信息
    m   //是否顯示內(nèi)存相關(guān)信息
    c   //是否顯示完整的命令行信息
    q   //退出top命令
    k   //終止某個(gè)進(jìn)程
    1   //顯示所有CPU的信息
    s   //修改刷新時(shí)間間隔

使用htop命令這個(gè)命令比top安全性高

be69570a-a1c0-11ef-93f3-92fbcf53809c.png


//Mem內(nèi)存(一共1.75G,已經(jīng)用了302M)
//Swp所屬空間(有2.03G,使用0k)
//Tasks任務(wù)一共有29個(gè) 現(xiàn)存有17個(gè),一個(gè)正在運(yùn)行
//load average負(fù)載均衡0000000
//uptime已經(jīng)運(yùn)行了2天3個(gè)多小時(shí)
//PIDPID是程序被操作系統(tǒng)加載到內(nèi)存成為進(jìn)程后動(dòng)態(tài)分配的資源,每次程序執(zhí)行時(shí),操作系統(tǒng)都會(huì)重新加載,PID在每次加載的時(shí)候都是不同的
//USER用戶
//PRI優(yōu)先級(jí)
//NI nice值
//VIRT虛擬內(nèi)存集
//RES常駐內(nèi)存集
//S狀態(tài)
//CPU%cpu使用率
//MEM%硬盤使用率
//TIME+運(yùn)行的時(shí)長(zhǎng)
//Command 執(zhí)行的命令
F1:幫助
F2:設(shè)置
F3:搜索
F4:過(guò)濾
F5:生成樹(shù)
F6:排序
F7:nice值減
F8:nice加
F9:殺死
F10:退出

作業(yè)

寫出以下描述對(duì)應(yīng)的進(jìn)程狀態(tài)標(biāo)志:

描述 狀態(tài)標(biāo)志
進(jìn)程已被停止(暫停) T
進(jìn)程已釋放了其所有資源(pid除外) X
進(jìn)程正在CPU上運(yùn)行或者正在等待于CPU上運(yùn)行 R
進(jìn)程正處于睡眠狀態(tài),直至滿足某些條件后才會(huì)啟動(dòng) S
進(jìn)程正在等待I/O或某些條件得到滿足,并且絕對(duì)不會(huì)影響信號(hào) D

并排打開(kāi)兩個(gè)終端窗口,分別稱為左窗口和右窗口

be7cca60-a1c0-11ef-93f3-92fbcf53809c.png

在左窗口中,啟動(dòng)一個(gè)進(jìn)程,該進(jìn)程以一秒為間隔持續(xù)向~/outfile文件附加單詞"rock"和一個(gè)空格。整個(gè)命令集必須包含在括號(hào)內(nèi),以便作業(yè)控制可以將該集合解譯為一個(gè)作業(yè)

be81fe0e-a1c0-11ef-93f3-92fbcf53809c.png

在右窗口中,使用tail確認(rèn)新進(jìn)程正在寫入該文件

[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

be991daa-a1c0-11ef-93f3-92fbcf53809c.png


4. 4.在左窗口中,使用ctrl+z快捷鍵暫停正在運(yùn)行的進(jìn)程。shell將返回作業(yè)ID并用方括號(hào)括起。在右窗口中確認(rèn)進(jìn)程輸出已經(jīng)停止

bea18800-a1c0-11ef-93f3-92fbcf53809c.png

beacbf0e-a1c0-11ef-93f3-92fbcf53809c.png


5. 在左窗口中,查看jobs列表。+表示當(dāng)前的作業(yè)。使用bg命令在后臺(tái)重新啟動(dòng)該作業(yè),并再次查看jobs列表,在右窗口中,確認(rèn)進(jìn)程輸出再次處于活動(dòng)狀態(tài)

beb5a25e-a1c0-11ef-93f3-92fbcf53809c.png

beacbf0e-a1c0-11ef-93f3-92fbcf53809c.png


6. 在左窗口中,再啟動(dòng)兩個(gè)進(jìn)程,以便向同一輸出文件附加內(nèi)容。將"rock"替換為"paper",再替換為"scissors"。要將進(jìn)程正確置于后臺(tái),整個(gè)命令集必須包含在括號(hào)內(nèi),并且以&符號(hào)結(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,以查看所有三個(gè)進(jìn)程都在運(yùn)行中。在右窗口中,確認(rèn)所有三個(gè)進(jìn)程都附加內(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 ) &

bf08e9be-a1c0-11ef-93f3-92fbcf53809c.png


8. 僅使用之前學(xué)習(xí)的命令,暫停"rock"進(jìn)程。在左窗口中,使用從jobs列表中確定的作業(yè)ID使作業(yè)進(jìn)入前臺(tái),然后使用ctrl+z暫停該作業(yè),確認(rèn)"rock"進(jìn)程為已停止。在右窗口中,確認(rèn)"rock"輸出不再活動(dòng)

[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 ) &

bf18cbcc-a1c0-11ef-93f3-92fbcf53809c.png


9. 終止"paper"進(jìn)程。在左窗口中,使作業(yè)進(jìn)入前臺(tái),然后使用ctrl+c終止該作業(yè),確認(rèn)"paper"進(jìn)程已經(jīng)消失。在右窗口中,確認(rèn)"paper"輸出不再活動(dòng)

[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 ) &

bf1d7e1a-a1c0-11ef-93f3-92fbcf53809c.png


10. 在左窗口中,使用ps查看剩余的作業(yè)。暫停中的作業(yè)具有狀態(tài)T標(biāo)志。其他后臺(tái)作業(yè)為睡眠中(S),因?yàn)閜s在顯示時(shí)處于"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

停止剩余的兩個(gè)作業(yè)。在左窗口中,使其中一個(gè)作業(yè)進(jìn)入前臺(tái)。使用ctrl+c將其終止,對(duì)剩余的作業(yè)重復(fù)此操作。停止的作業(yè)在前入前臺(tái)時(shí)會(huì)臨時(shí)重新啟動(dòng)。確認(rèn)沒(méi)有剩余的作業(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)閉多余的終端窗口

bf298b4c-a1c0-11ef-93f3-92fbcf53809c.png

bf33c09e-a1c0-11ef-93f3-92fbcf53809c.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)控
    +關(guān)注

    關(guān)注

    6

    文章

    2319

    瀏覽量

    57568
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213862

原文標(biāo)題:深入Linux進(jìn)程管理:提升效率與穩(wěn)定性的關(guān)鍵方法

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    是德頻譜分析儀對(duì)微波信號(hào)頻率穩(wěn)定性的測(cè)量與分析

    微波信號(hào)頻率穩(wěn)定性在現(xiàn)代通信、雷達(dá)、電子對(duì)抗等領(lǐng)域至關(guān)重要。是德頻譜分析儀作為高精度的測(cè)量設(shè)備,能夠?qū)ξ⒉ㄐ盘?hào)的頻率穩(wěn)定性進(jìn)行準(zhǔn)確測(cè)量與深入分析。以下是相關(guān)探討。 測(cè)量原理及方法 是德
    的頭像 發(fā)表于 06-13 13:54 ?204次閱讀
    是德頻譜分析儀對(duì)微波信號(hào)頻率<b class='flag-5'>穩(wěn)定性</b>的測(cè)量與分析

    HarmonyOS官網(wǎng)上線“穩(wěn)定性”專欄 助力更穩(wěn)定流暢的鴻蒙原生應(yīng)用開(kāi)發(fā)

    建設(shè)應(yīng)用穩(wěn)定性的內(nèi)容,即穩(wěn)定性優(yōu)化與穩(wěn)定性運(yùn)維兩個(gè)部分,穩(wěn)定性優(yōu)化主要從規(guī)范性的角度出發(fā),介紹了如何通過(guò)良好的編碼習(xí)慣和有效的日志維護(hù)方案來(lái)提升
    發(fā)表于 02-17 17:17

    旋轉(zhuǎn)測(cè)徑儀的底座如何保證穩(wěn)定性?

    關(guān)鍵字:旋轉(zhuǎn)測(cè)徑儀,底座材質(zhì),測(cè)徑儀底座結(jié)構(gòu),旋轉(zhuǎn)測(cè)徑儀穩(wěn)定性, 旋轉(zhuǎn)測(cè)徑儀的底座保證穩(wěn)定性是確保測(cè)量精度和儀器長(zhǎng)期穩(wěn)定運(yùn)行的關(guān)鍵。以下是一
    發(fā)表于 01-09 14:04

    庫(kù)存平臺(tái)穩(wěn)定性建設(shè)實(shí)踐

    提供全面的庫(kù)存管理服務(wù),貫穿其整個(gè)訂單生命周期,是電商領(lǐng)域不可或缺的核心模塊。在平臺(tái)建設(shè)過(guò)程中,我們面臨了諸多穩(wěn)定性方面的挑戰(zhàn)。 ? ? 具體而言,存在以下問(wèn)題: 1、業(yè)務(wù)流程繁多,不同流程共同訪問(wèn)同一應(yīng)用,容易相互影
    的頭像 發(fā)表于 12-11 09:50 ?578次閱讀
    庫(kù)存平臺(tái)<b class='flag-5'>穩(wěn)定性</b>建設(shè)實(shí)踐

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

    測(cè)量結(jié)果的偏差和不確定性。本文將深入探討影響34460A萬(wàn)用表測(cè)量穩(wěn)定性的因素,并提出相應(yīng)的優(yōu)化策略,以期提升測(cè)量精度和效率,為科研、生產(chǎn)和
    的頭像 發(fā)表于 12-05 10:06 ?566次閱讀
    是德34460A萬(wàn)用表的測(cè)量<b class='flag-5'>穩(wěn)定性</b><b class='flag-5'>提升</b>

    如何測(cè)試晶振的穩(wěn)定性

    以下是一些常用的方法來(lái)測(cè)試晶振的穩(wěn)定性。
    的頭像 發(fā)表于 11-29 16:41 ?1087次閱讀

    如何測(cè)試DDR內(nèi)存的穩(wěn)定性

    測(cè)試DDR內(nèi)存的穩(wěn)定性是確保計(jì)算機(jī)系統(tǒng)穩(wěn)定運(yùn)行的重要步驟。以下是一些常用的測(cè)試DDR內(nèi)存穩(wěn)定性方法: 一、使用專業(yè)測(cè)試軟件 MemTest86 : 功能:MemTest86是一款優(yōu)秀
    的頭像 發(fā)表于 11-29 15:01 ?2738次閱讀

    buck電路的穩(wěn)定性分析方法

    Buck電路的穩(wěn)定性分析方法主要涉及反饋增益、相位裕度、負(fù)載擾動(dòng)以及控制策略等方面。以下是對(duì)這些分析方法的介紹: 一、反饋增益分析 反饋增益是Buck電路實(shí)現(xiàn)穩(wěn)定輸出的
    的頭像 發(fā)表于 11-21 10:09 ?1561次閱讀

    住宅靜態(tài)IP:提升家庭網(wǎng)絡(luò)穩(wěn)定性關(guān)鍵

    住宅靜態(tài)IP是指專為家庭網(wǎng)絡(luò)環(huán)境設(shè)計(jì)的固定IP地址,通常由互聯(lián)網(wǎng)服務(wù)提供商(ISP)為家庭用戶提供,并在其生命周期中保持不變,除非由于某些外部因素(如ISP更改策略)或用戶請(qǐng)求更改。這種IP地址因其固定性,成為了提升家庭網(wǎng)絡(luò)穩(wěn)定性
    的頭像 發(fā)表于 10-24 07:57 ?669次閱讀

    穩(wěn)定性建設(shè)之變更管理

    、服務(wù)器的擴(kuò)容、三方j(luò)ar包的變更等等。然而,變更的執(zhí)行過(guò)程往往伴隨著一系列的風(fēng)險(xiǎn)和挑戰(zhàn)。變更管理對(duì)于確保系統(tǒng)的穩(wěn)定性至關(guān)重要。只有通過(guò)有效的變更管理措施,如合理的變更計(jì)劃、全面的測(cè)試和驗(yàn)證、及時(shí)的問(wèn)題解決等,才能夠
    的頭像 發(fā)表于 10-14 17:12 ?653次閱讀
    <b class='flag-5'>穩(wěn)定性</b>建設(shè)之變更<b class='flag-5'>管理</b>

    簡(jiǎn)化穩(wěn)定性檢查

    電子發(fā)燒友網(wǎng)站提供《簡(jiǎn)化穩(wěn)定性檢查.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 11:23 ?0次下載
    簡(jiǎn)化<b class='flag-5'>穩(wěn)定性</b>檢查

    聚徽-提升工業(yè)顯示屏耐用性與穩(wěn)定性方法都有哪些

    提升工業(yè)顯示屏耐用性與穩(wěn)定性方法主要包括以下幾個(gè)方面:
    的頭像 發(fā)表于 09-12 10:14 ?783次閱讀

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

    舵輪的穩(wěn)定性對(duì)AGV(自動(dòng)導(dǎo)引車)的運(yùn)行效率和整體穩(wěn)定性具有顯著的影響。以下是關(guān)于舵輪穩(wěn)定性與AGV運(yùn)行效率
    的頭像 發(fā)表于 08-27 13:20 ?707次閱讀
    鳳凰動(dòng)力舵輪驅(qū)動(dòng)輪的<b class='flag-5'>穩(wěn)定性</b>如何影響AGV的運(yùn)行<b class='flag-5'>效率</b>和<b class='flag-5'>穩(wěn)定性</b>

    有源濾波器設(shè)計(jì)中,判定穩(wěn)定性方法有哪些?

    有源濾波器設(shè)計(jì)中,判定穩(wěn)定性,有沒(méi)有簡(jiǎn)單的方法
    發(fā)表于 08-21 06:36

    VCO的頻率穩(wěn)定性是什么

    的能力。以下是對(duì)VCO頻率穩(wěn)定性的詳細(xì)探討,包括其定義、影響因素、測(cè)試方法提升措施及應(yīng)用場(chǎng)景等方面,旨在全面解析這一重要概念。
    的頭像 發(fā)表于 08-20 16:08 ?1832次閱讀