国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入Linux進程管理:提升效率與穩定性的關鍵方法

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2024-11-22 11:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目錄

Linux進程管理

8.1 IO負載

8.2 實時進程監控

5.1 作業與會話

5.2 作業分類

4.1 ps

4.2pstree

4.3pgrep

4.4pidof

4.5 vmstat

3.1Linux進程調度與多任務

3.2進程優先級

3.3相對優先級

3.4nice級別與權限

3.5進程優先級調整

1.1進程的組成部分

1.2進程的環境

1.3進程的產生

1.4進程的分類

1.進程基本概述

2.進程狀態

3.進程優先級

4.進程命令

5. 控制作業

6.進程間通信

7.使用信號控制進程

監控進程活動

作業

1.進程基本概述

進程是已啟動的可執行程序的運行中實例。

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

1.1進程的組成部分

1.1.1 已分配內存的地址空間
1.1.2 安全屬性,包括所有權憑據和特權
1.1.3 程序代碼的一個或多個執行線程
1.1.4 進程狀態

1.2進程的環境

1.2.1 本地和全局變量
1.2.2 當前調度上下文
1.2.3 分配的系統資源,如文件描述符和網絡端口

1.3進程的產生

現有的(父)進程復制自己的地址空間(fork)來創建一個新的(子)進程結構。
每個新進程分配有一個唯一的進程ID(PID),滿足跟蹤和安全性之需。PID與父進程ID(PPID)是新進程環境的元素。
任何進程可創建子進程。所有進程都是第一個系統進程的后代。RHEL7上,第一個系統進程是systemd。

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


通過fork例程,子進程繼承安全性身份、過去和當前的文件描述符、端口和資源特權、環境變量,以及程序代碼。隨后,子進程可能exec其自己的程序代碼。通常,父進程在子進程運行期間處于睡眠狀態,設置一個在子進程完成時發出信號的請求(wait)。在退出時,子進程可能已經關閉或丟棄了其資源和環境,剩余的部分被稱作僵停。父進程在子進程退出時收到信號而被喚醒,清理剩余結構,然后繼續執行其自己的程序代碼。

1.4進程的分類

1.4.1 前臺進程:與終端相關的進程,通過終端啟動的進程
注意:也可把在前臺啟動的進程送往后臺,以守護模式運行
1.4.2 守護進程:daemon,與終端無關的進程(如內核),在系統引導過程中啟動的進程

2.進程狀態

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

Excuting 運行態
Ready 就緒態,也可以稱作睡眠態
Uninterruptible sleep 不可中斷的睡眠。不可隨時喚醒,只有當IO資源加載成功后才能喚醒
Interruptible sleep 可中斷的睡眠。可隨時喚醒
Zombie 僵尸進程。正常運行結束了,但是不釋放占據的內存
Stopped 停止態,暫停于內存中,但不會被調度,除非手動啟動之

進程睡眠的原因:
當一個執行中的進程,需要加載額外的IO資源的時候,由于IO設備的速度太慢,所以會轉入睡眠狀態等待,交出CPU給其他進程,以免浪費剩余執行時間

Linux進程狀態

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

3.進程優先級

3.1Linux進程調度與多任務

3.1.1 現代計算機系統中既包含每次只能執行一個指令的低端處理器,也包含高性能超級計算機,這些超級計算機每臺配備數百個CPU,每個CPU上具有多個核心,它們可以并行執行數以百計的指令。但是所有這些系統往往具有一個共同點:它們需要運行的進程數量總是超出實際具有的核心數。

3.1.2 通過時間分片技術,Linux(和其他操作系統)實際能夠運行的進程數(和線程數)可以超出可用的實際處理單元數。操作系統進程調度程序將在單個核心上的進程之間進行快速切換,從而給用戶一種有多個進程在同時運行的印象。

3.1.3 執行此切換的Linux內核部分稱為進程調度程序。

3.2進程優先級

進程優先級范圍:0-139,數字越小,優先級越高
0-99:實時優先級,內核調整
100-139:靜態優先級,用戶可控制
進程優先級高的特點:
獲得更多的CPU運行時間
更優先獲得CPU運行的機會
要修改進程的優先級可以通過調整進程的nice值來實現,nice值越小,優先級越高:
nice值的范圍是(-20,19),-20對應100,19對應139

3.3相對優先級

3.3.1 由于不是每種進程都與其他進程同樣重要,可告知調度程序為不同的進程使用不同的調度策略。常規系統上運行的大多數進程所使用的調度策略稱為SCHED_OTHER(也稱為SCHED_NORMAL),但還有一些其他策略可用于不同的目的。

3.3.2 由于并非所有進程都以同樣的方式創建,可為采用SCHED_NORMAL策略運行的進程指定相對優先級。此優先級稱為進程的nice值。一個進程可以有40種不同級別的nice值。

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

nice級別越高,表示優先級越低(該進程容易將其CPU使用量讓給其他進程)
nice級別越低,表示優先級越高(該進程更加不傾向于讓出CPU)
如果不存在資源爭用(例如當活動進程數少于可用CPU核心數時),即使nice級別高的進程也將仍使用它們可使用的所有可用CPU資源。但當請求CPU時間的進程數超過可用核心數時,nice級別較高的進程將比nice級別較低的進程收到更少的CPU時間

3.4nice級別與權限

為很占CPU資源的進程設置較低的nice級別可能會對同一系統上運行的其他進程的性能造成負面影響,所以僅允許root用戶設置負nice級別以及降低現有進程的nice級別。
普通非特權用戶僅允許設置正的nice級別。只能對現有進程提升nice級別,而不能降低nice級別。

3.5進程優先級調整

進程優先級調整:調整nice值
//調整已經啟動的進程的nice值:
renice NI PID(例:renice 3 3704)
//在啟動時指定nice值:(-20,19)
nice -n NI COMMAND

[root@lnh ~]# sleep 50000
//在另一個終端執行的
[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系統各進程的相關信息均保存在/proc/PID目錄下的各文件中

4.1 ps

ps(process state)命令用于列出當前的進程。可以顯示詳細的進程信息,包括:

1.1 用戶識別符(UID),它確定進程的特權
1.2 唯一進程識別符(PID)
1.3 CPU和已經花費的實時時間
1.4 進程在各種位置上分配的內存數量
1.5 進程的位置STDOUT,稱為控制終端
1.6 當前的進程狀態
2. ps支持三種選項格式:

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

3.1 加了[]中括號的,表示內核線程,通常位于頂部
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顯示所有與終端有關的進程,u顯示進程是由哪個用戶啟動的,x顯示所有與終端無關的進程
//USER:用戶 PID:進程id %CPU:CPU使用率 %MEM:內存使用率 VSZ:虛擬內存集
RSS:常駐內存集 TTY:在哪里登錄的(?開機自啟,遠程連上去敲的命令是有位置的eg:pts/2) STAT:進程狀態 TIME:運行時的累積時長 START:啟動時間 COMMAND:執行的命令

-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以進程層級格式顯示進程相關信息
[root@lnh ~]# ps -o pid,comm,ni
    PID COMMAND          NI
   9955 bash              0
  10196 ps                0
//表示只顯示進程號,命令,nice值三個字段

4.2pstree

pstree用于顯示當前系統上的進程樹
Linux由2棵樹組成:

進程樹

文件系統掛載樹

[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風格指定只顯示哪些進程,在當前系統中找符合某些特性的進程。只顯示進程號

[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

根據進程名查找其PID號

[root@lnh ~]# pidof sleep 
10242
[root@lnh ~]# pidof systemd
1471 1468 1

4.5 vmstat

虛擬內存狀態查看命令

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

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

5. 控制作業

5.1 作業與會話

作業控制是shell的一種功能,它允許單個shell實例運行和管理多個命令。

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

一次只能有一個作業從特定終端窗口讀取輸入和鍵盤生成的信號。屬于該作業的進程是該控制終端的前臺進程。

該控制終端的后臺進程是與該終端相關聯的任何其他作業的成員。終端的后臺進程無法從終端讀取輸入或接收鍵盤生成的中斷,但可以寫入終端。后臺中的作業可能已停止(暫停),也可能正在運行。如果某個正在運行的后臺作業嘗試從終端讀取內容,則該作業將自動暫停。

每個終端是其自身的會話,并且可以具有一個前臺進程和多個獨立的后臺進程。一個作業只能屬于一個會話,也就是屬于其控制終端的會話。

[root@lnh ~]# sleep 5000
^Z
[1]+  Stopped                 sleep 5000
[root@lnh ~]# jobs 
[1]+  Stopped                 sleep 5000
//一個作業只能屬于一個會話,這個里面是ctrl+z將作業放進后臺了,然后jobs查看出來

5.2 作業分類

Linux作業分為前臺作業與后臺作業兩種。其各自的特點如下:

前臺作業:通過終端啟動,且啟動后一直占據了命令提示符
后臺作業:可以通過終端啟動,但啟動之后,釋放命令提示符,后續的操作在后臺完成
此類作業雖然被送往后臺運行,但其依然與終端相關。如果希望送往后臺后,剝離與終端的關系需要執行(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 & //可以看見作業
[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
//在另外一個終端也可以查看到進行,如果把原來有后臺作業的那個終端關閉了在這里是查看不到進程的
[root@lnh ~]# fg
sleep 5000   //可以將后臺的作業調入前臺
^C   //終止
//當只有一個后臺作業時,直接使用fg命令,不跟任何參數即可將后臺作業調至前臺運行
[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
//當有多個作業時則必須跟上%+作業號,也就是上面命令執行結果中以[]括起來的數字
[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可將前臺進程發送到后臺,此時作業將處于停止狀態
[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命令+作業號可使后臺已停止的作業重新運行
[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加上作業號可以手動殺死指定作業
//jobs命令的結果中
// +  命令將默認操作的作業
// -  命令將第二個默認操作的作業
[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)

進程間通信方式:

同一主機
共享內存
信號:Signal
不同主機
rpc:remote procecure call
基于socket實現進程間通信

7.使用信號控制進程

信號是傳遞至進程的軟件中斷。信號向執行中的程序報告事件。生成信號的事件可以是錯誤或外部事件(如I/O請求或計時器過期),或者來自于明確請求(如使用信號發送命令)

下表列出了系統管理員用于日常進程管理的基本信號。請通過短名稱(HUP)或正確名稱(SIGHUP)指代信號。

指定一個信號的方法:
信號號碼(數字標識):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命令根據ID向進程發送信號。雖其名稱為kill,但該命令可用于發送任何信號,而不僅僅是終止程序的信號

[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
//可以查看到,運行的進程都被刪除了

監控進程活動

8.1 IO負載

負載平均值代表一段時間內感知的系統負載。Linux通過預期服務等待時間的表示來實施平均負載計算。

Linux不僅計算進程數,也作為獨立的任務計算線程數。運行中線程和等待I/O資源的線程的CPU請求隊列對應于R和D進程狀態。等待I/O包括處于睡眠而等待預期磁盤和網絡響應的任務。

負載數屬于全局計數器計算,是所有CPU的總和數。由于從睡眠返回的任務可能會重新調度到不同的CPU,難以精確的每CPU計數,但累計數的準確度可以保障。顯示的平均負載代表所有的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核心數,可以看見是四核

一些UNIX系統僅考慮CPU使用率或運行隊列長度來指示系統負載。由于具有空閑CPU的系統可能會因為磁盤或網絡資源忙而遇到很長時間的等待,因此Linux負載平均值中包含了對I/O的考量。遇到負載平均值很高但CPU活動很低時,請檢查磁盤和網絡活動。

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是空閑的

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

空閑CPU隊列的負載數為0。每個就緒和等待的線程使計數增加1。總隊列數為1時,資源(CPU、磁盤或網絡)正在使用中,但沒有請求把時間花在等待上。增加的請求數會累積該計數,但由于許多請求可以在時限內處理,資源使用率會很高,而等待時間則不會。

因為磁盤或網絡資源忙碌等待I/O而處于睡眠的進程包含在該計數內,而且使負載平均值增大。雖然不能表示CPU使用率,隊列數依然表明用戶和程序正在等待資源服務。

在資源飽和前,平均負載將保持在1以下,因為幾乎不會在隊列中發現等待的任務。只有資源飽和導致請求留在排隊狀態并且被負載計算例程計數時,負載平均才會增大。當資源使用率接近100%時,每個增加的請求將開始遭遇服務等待時間。

8.2 實時進程監控

top用于實現全屏動態顯示系統信息
//常用選項:
-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隊列中等待運行的任務的個數
cpu(s):多顆CPU平均負載,按1鍵顯示每顆CPU平均負載。
    us  //表示用戶空間;
    sy  //表示內核空間;
    ni  //表示調整nice值,CPU占用的比率;
    id  //表示空閑百分比;
    wa  //表示等待IO完成所占據的時間百分比;
    hi  //表示hard interrupt,硬件中斷占據的時間百分比;
    si  //表示軟中斷占據的時間百分比;
    st  //表示steal,被虛擬化技術偷走的時間(比如運行虛擬機)
PR      //優先級
NI      //nice值
VIRT    //虛擬內存集
RES     //常駐內存集
SHR     //共享內存大小
S       //進程狀態


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

使用htop命令這個命令比top安全性高

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


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

作業

寫出以下描述對應的進程狀態標志:

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

并排打開兩個終端窗口,分別稱為左窗口和右窗口

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

在左窗口中,啟動一個進程,該進程以一秒為間隔持續向~/outfile文件附加單詞"rock"和一個空格。整個命令集必須包含在括號內,以便作業控制可以將該集合解譯為一個作業

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

在右窗口中,使用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

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


4. 4.在左窗口中,使用ctrl+z快捷鍵暫停正在運行的進程。shell將返回作業ID并用方括號括起。在右窗口中確認進程輸出已經停止

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

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


5. 在左窗口中,查看jobs列表。+表示當前的作業。使用bg命令在后臺重新啟動該作業,并再次查看jobs列表,在右窗口中,確認進程輸出再次處于活動狀態

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

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


6. 在左窗口中,再啟動兩個進程,以便向同一輸出文件附加內容。將"rock"替換為"paper",再替換為"scissors"。要將進程正確置于后臺,整個命令集必須包含在括號內,并且以&符號結尾

[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,以查看所有三個進程都在運行中。在右窗口中,確認所有三個進程都附加內容到文件中

[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. 僅使用之前學習的命令,暫停"rock"進程。在左窗口中,使用從jobs列表中確定的作業ID使作業進入前臺,然后使用ctrl+z暫停該作業,確認"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 ) &

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


9. 終止"paper"進程。在左窗口中,使作業進入前臺,然后使用ctrl+c終止該作業,確認"paper"進程已經消失。在右窗口中,確認"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 ) &

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


10. 在左窗口中,使用ps查看剩余的作業。暫停中的作業具有狀態T標志。其他后臺作業為睡眠中(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

停止剩余的兩個作業。在左窗口中,使其中一個作業進入前臺。使用ctrl+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 ) &
[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命令。關閉多余的終端窗口

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 監控
    +關注

    關注

    6

    文章

    2382

    瀏覽量

    59423
  • Linux
    +關注

    關注

    88

    文章

    11760

    瀏覽量

    219032

原文標題:深入Linux進程管理:提升效率與穩定性的關鍵方法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    微電網穩定性分析:小干擾穩定與暫態穩定關鍵技術

    ”,后者關注“劇烈沖擊后的安全過渡能力”,詳細了解微電網管理系統平臺可咨詢:1.3.7-5.0.0.4-6.2.0.0。。深入解析兩類穩定的技術特征,掌握其關鍵分析
    的頭像 發表于 03-02 10:43 ?1494次閱讀
    微電網<b class='flag-5'>穩定性</b>分析:小干擾<b class='flag-5'>穩定</b>與暫態<b class='flag-5'>穩定</b><b class='flag-5'>關鍵</b>技術

    Neway微波的穩定性優勢

    Neway微波的穩定性優勢Neway微波的穩定性優勢體現在相位穩定性、幅度穩定性、環境適應性及長期可靠性四個方面,這些特性使其在5G/6G通信、衛星通信、國防軍事等高頻場景中成為
    發表于 01-05 08:48

    數字隔離器,如何提升光伏系統的運行穩定性

    2025年光伏行業轉向高質量發展,數字隔離器提升系統穩定性與安全性,保障高效運行。
    的頭像 發表于 12-26 15:24 ?344次閱讀
    數字隔離器,如何<b class='flag-5'>提升</b>光伏系統的運行<b class='flag-5'>穩定性</b>?

    解析Linux進程、線程和協程

    系統的穩定性和安全性。 (3)創建與銷毀:Linux使用fork()系統調用來創建新進程,通過exit()來終止進程。 線程(Thread) 線程是
    發表于 12-22 11:00

    如何評估內嵌式模組的穩定性

    運行可靠性與壽命。 綜合驗證與品牌考量:在決策前,盡可能進行模擬工況的壽命測試,這是驗證其長期穩定性的最有效方法。同時,選擇行業內有良好口碑和豐富應用案例的品牌,通常意味著更可靠的產品質量、完善的技術支持與售后服務,保障生產連續性。
    發表于 12-04 15:27

    CW32 MCU在高頻率運行下的系統穩定性提升方案

    ,通過合理的電源管理和熱管理策略,保持系統穩定性,包括動態電壓調節(DVS)、節能模式切換、以及散熱方案優化等。 通過這些穩定性提升方案,開
    發表于 12-04 08:04

    高精度壓力測量器:國產萬分級精度零點穩定性和滿量程穩定性能應用場景分析

    能做到萬分級別(≤0.01% FS)零點與滿量程穩定性的壓力傳感器,屬于 高精度壓力測量器件 ,核心適用于對壓力數據精度、長期可靠性要求極高的場景,尤其能滿足 “長期免校準” 或 “關鍵參數不可偏差
    發表于 10-28 10:40

    如何保證合金電阻的穩定性與精度?

    保證合金電阻的穩定性與精度需從材料選擇、制造工藝、結構設計、環境控制及測試驗證等多維度綜合施策。以下從技術原理、關鍵措施及實際應用三個層面展開分析: 一、材料選擇:奠定穩定性基礎 合金電阻的精度
    的頭像 發表于 10-27 15:29 ?549次閱讀
    如何保證合金電阻的<b class='flag-5'>穩定性</b>與精度?

    如何利用X-Ray技術提升鋰電池安全性與穩定性

    非破壞性、高分辨率的優勢,成為提升鋰電池品質和安全性能的重要工具。本文將深入探討如何利用X-Ray技術提升鋰電池安全性與穩定性,幫助企業優化產品質量,滿足日益嚴苛的市場需求,解決鋰電池
    的頭像 發表于 10-13 14:22 ?584次閱讀

    三坐標如何實現測量穩定性提升

    在三坐標測量機的核心部件中,橫梁與Z軸材料的穩定性對測量結果起著決定性作用。同一臺機器,不同的橫梁材料,儀器具有不同的穩定性能。MizarGold采用的陶瓷橫梁其XRY角擺波動始終穩定
    的頭像 發表于 08-25 11:14 ?1263次閱讀
    三坐標如何實現測量<b class='flag-5'>穩定性</b>的<b class='flag-5'>提升</b>

    手持云臺馬達驅動:提升攝影穩定性與觀感的秘密武器

    在攝影的世界里,穩定性一直是影響作品質量的關鍵因素。無論是專業攝影師捕捉精彩瞬間,還是普通愛好者記錄生活點滴,畫面的穩定與流暢都至關重要。而手持云臺馬達驅動的出現,如同給攝影設備裝上了“穩定
    的頭像 發表于 07-22 16:51 ?735次閱讀

    是德頻譜分析儀對微波信號頻率穩定性的測量與分析

    微波信號頻率穩定性在現代通信、雷達、電子對抗等領域至關重要。是德頻譜分析儀作為高精度的測量設備,能夠對微波信號的頻率穩定性進行準確測量與深入分析。以下是相關探討。 測量原理及方法 是德
    的頭像 發表于 06-13 13:54 ?763次閱讀
    是德頻譜分析儀對微波信號頻率<b class='flag-5'>穩定性</b>的測量與分析

    MUN12AD03-SEC的熱性能如何影響其穩定性

    ,以提升MUN12AD03-SEC的輸出紋波和動態響應。輸入電容器需要盡量接近MUN12AD03-SEC的輸入管腳,以最小化輸入紋波電壓并保證MUN12AD03-SEC穩定性能。良好的濾波設計可以減少因電源紋波和噪聲引起的熱量產生,從而間接提高模塊的
    發表于 05-15 09:41

    【Simcenter Flotherm】憑借快速準確的電子冷卻CFD仿真功能,有效提升電子熱管理穩定性

    解決方案優勢憑借快速準確的電子冷卻CFD仿真(從初期CAD前探索到最終驗證)功能,有效提升電子熱管理穩定性。加速電子熱設計工作流充分利用準確、快速的熱分析智能SmartParts縮短建模時間整合高
    的頭像 發表于 03-26 15:31 ?869次閱讀
    【Simcenter Flotherm】憑借快速準確的電子冷卻CFD仿真功能,有效<b class='flag-5'>提升</b>電子熱<b class='flag-5'>管理</b>的<b class='flag-5'>穩定性</b>

    是德示波器在功率穩定性測試中的技術方法

    將詳細探討是德示波器模塊在功率穩定性測試中的技術方法,包括其基本原理、操作流程、數據分析技巧以及實際應用案例。 ? 一、是德示波器功率分析功能概述 是德示波器能夠精確測量和分析電壓、電流和功率等關鍵參數。通過
    的頭像 發表于 03-25 12:57 ?792次閱讀
    是德示波器在功率<b class='flag-5'>穩定性</b>測試中的技術<b class='flag-5'>方法</b>