天天看點

linux中程序管理(ps、top、pstree、pgrep、jobs、&、kill、fg)一、檢視控制程序二、程序控制

程序管理

  • 一、檢視控制程序
      • 1、ps檢視靜态程序統計資訊(Processes Statistic)
      • 2、top檢視程序動态資訊
      • 3、pgrep查詢程序資訊
      • 4、pstree檢視程序樹、
  • 二、程序控制
      • 1、啟動以及改變運作程序方式
          • 1)手動啟動程序方式
          • 2)排程啟動程序方式
          • 3)改變程序的運作方式(Ctrl+Z)
          • 4)檢視背景的程序(jobs)
          • 5)将背景的程序恢複運作(fg)
      • 2、終止執行程序(kill、killall 和 pkill)
          • 1)使用 kill 指令終止程序
          • 2)使用 killall 指令終止程序
          • 3)使用 pkill 指令終止程序

一、檢視控制程序

程式是儲存在外部存儲媒體(如硬碟)中的可執行機器代碼和資料的靜态集合,而程序 是在 CPU 及記憶體中處于動态執行狀态的計算機程式。在 Linux 作業系統中,每個程式啟動後可以建立一個或多個程序。

1、ps檢視靜态程序統計資訊(Processes Statistic)

ps 指令是 Linux 作業系統中最為常用的程序檢視工具,主要用于顯示包含目前運作的各程序完整資訊的靜态快照。

ps 指令常用選項

選項 注釋
a 顯示目前終端下的所有程序資訊,包括其他使用者的程序。與“x”選項結合時将顯 示系統中所有的程序資訊。
u 使用以使用者為主的格式輸出程序資訊。
x 顯示目前使用者在所有終端下的程序資訊。
-e 顯示系統内的所有程序資訊。
-l 使用長(Long)格式顯示程序資訊。
-f 使用完整的(Full)格式顯示程序資訊。

**注:**ps 指令中常用的幾個選項,有一部分選項是不帶“-”字首的(添加“-”字首後含義可能會有出入)。習慣上将上述選項組合在一起使用,執行“ps aux”或“ps -elf”指令。

[[email protected] ~]# ps
   PID TTY          TIME CMD
 18695 pts/0    00:00:00 bash
 18804 pts/0    00:00:00 ps
//直接執行不帶任何選項的 ps 指令時,将隻顯示目前使用者會話中打開的程序
[[email protected] ~]# ps aux    //以簡單清單的形式顯示出系統程序資訊
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1 191044  4128 ?        Ss   02:46   0:02 /usr/lib/systemd/systemd --
root          2  0.0  0.0      0     0 ?        S    02:46   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    02:46   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   02:46   0:00 [kworker/0:0H]
root          6  0.0  0.0      0     0 ?        S    02:46   0:01 [kworker/u256:0]
root          7  0.0  0.0      0     0 ?        S    02:46   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    02:46   0:00 [rcu_bh]
root          9  0.0  0.0      0     0 ?        S    02:46   0:02 [rcu_sched]
··········
           
  • USER:啟動該程序的使用者賬号的名稱。
  • PID:該程序在系統中的數字 ID 号,在目前系統中是唯一的。
  • %CPU:CPU 占用的百分比。
  • %MEM:記憶體占用的百分比。
  • VSZ:占用虛拟記憶體(swap 空間)的大小。
  • RSS:占用常駐記憶體(實體記憶體)的大小。
  • TTY:表明該程序在哪個終端上運作。“?”表示未知或不需要終端。
  • STAT:顯示程序目前的狀态,如 S(休眠)、R(運作)、Z(僵死)、<(高優先級)、N(低優先級)、s(父程序)、+(前台程序)。對處于僵死狀态的程序應該予以手動終止。
  • START:啟動該程序的時間。
  • TIME:該程序占用的 CPU 時間。
  • COMMAND:啟動該程序的指令的名稱。
[[email protected] ~]# ps -elf   //以長格式顯示系統中的程序資訊
F S UID         PID   PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD
4 S root          1      0  0  80   0 - 47761 ep_pol 02:46 ?        00:00:02 /usr/lib/systemd
1 S root          2      0  0  80   0 -     0 kthrea 02:46 ?        00:00:00 [kthreadd]
1 S root          3      2  0  80   0 -     0 smpboo 02:46 ?        00:00:00 [ksoftirqd/0]
1 S root          5      2  0  60 -20 -     0 worker 02:46 ?        00:00:00 [kworker/0:0H]
1 S root          6      2  0  80   0 -     0 worker 02:46 ?        00:00:01 [kworker/u256:0]
1 S root          7      2  0 -40   - -     0 smpboo 02:46 ?        00:00:00 [migration/0]
1 S root          8      2  0  80   0 -     0 rcu_gp 02:46 ?        00:00:00 [rcu_bh]
1 S root          9      2  0  80   0 -     0 rcu_gp 02:46 ?        00:00:02 [rcu_sched]
5 S root         10      2  0 -40   - -     0 smpboo 02:46 ?        00:00:00 [watchdog/0]
// PPID 列(表示對應程序的父程序的 PID 号)
           

2、top檢視程序動态資訊

使用 ps 指令檢視到的是一個靜态的程序資訊,并不能連續地回報出目前程序的運作狀态。若希望以動态重新整理的方式顯示各程序的狀态資訊,可以使用 top 指令。top 指令将會在目前終端以全屏互動式的界面顯示程序排名,及時跟蹤包括 CPU、記憶體等系統資源占用情況,預設情況下每三秒鐘重新整理一次,其作用基本類似于Windows 作業系統中的任務管理器。

[[email protected] ~]# top
top - 23:21:33 up 20:35,  2 users,  load average: 0.08, 0.03, 0.05
Tasks: 211 total,   1 running, 210 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  3865308 total,  1219320 free,   862384 used,  1783604 buff/cache
KiB Swap:  4063228 total,  4063228 free,        0 used.  2687068 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                
     1 root      20   0  191044   4128   2516 S   0.0  0.1   0:02.51 systemd 
···················
           
系統任務(Tasks)資訊 CPU 占用資訊 記憶體占用(Mem)資訊 交換空間(Swap)占用
total,總程序數 us,使用者占用 total,總記憶體空間 buff/cache,實體記憶體和交換記憶體的緩沖區總和
running,正在運作的程序數 sy,核心占用 free,空閑記憶體 free,空閑交換空間
sleeping, 休眠的程序數 ni,優先級排程占用 used,已用記憶體 used,已用交換空間
stopped,中止的程序數 id,空閑CPU% buff/cache,實體記憶體和交換記憶體的緩沖區總和 avail Mem,可用實體空間
zombie,僵死無響應的程序數 wa,I/O 等待占用
hi,硬體中斷占用
si,軟體中斷占用
st,虛拟化占用

top 指令的全屏操作界面

  • 按 P 鍵根據 CPU 占用情況對程序清單進行排序
  • 按 M 鍵根據記憶體占用情況進行排序
  • 按 N 鍵根據啟動時間進行排序
  • 按 h 鍵可以獲得 top 程式的線上幫助資訊
  • 按q 鍵可以正常地退出 top 程式

按top 排名工具發現某個程序 CPU 占用率非常高,需要終止該程序的運作,可以在 top 操作界面中按 k 鍵,然後在清單上方将會出現“PID to signal/kill [default pid = 3180]:” 的提示資訊,根據提示輸入指定程序的 PID 号并按 Enter 鍵, 出現“Send pid 5597 signal [15/sigterm]”的二次确認的提示資訊,然後按Enter 鍵确認即可終止對應的程序。

3、pgrep查詢程序資訊

[[email protected] ~]# pgrep -l ssh
1024 sshd
2853 ssh-agent
18693 sshd

[[email protected] ~]# pgrep -l -U root -t pts/0
18695 bash
           
  • “-l”選項可同時輸出對應的程序名(否則隻輸出 PID 号,不便于了解)
  • “-U”選項查詢特定使用者的程序
  • “-t”選項查詢在特定終端運作的程序

4、pstree檢視程序樹、

  • pstree 指令可以輸出 Linux 作業系統中各程序的樹形結構,以更加直覺地判斷各程序之間的互相關系(父程序、子程序)。
[[email protected] ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─2*[abrt-watch-log]
············
[[email protected] ~]# pstree -aup
systemd,1 --system --deserialize 13
  ├─ModemManager,752
  │   ├─{ModemManager},770
  │   └─{ModemManager},779
  ├─NetworkManager,6600 --no-daemon
··············
[[email protected] ~]# pstree -ap wu
bash,19406
           

“-p” 選項使用時可以同時列出對應的 PID 号

“-u”選項可以列出對應的使用者名

“-a”選項可以列出完整的指令資訊

二、程序控制

1、啟動以及改變運作程序方式

1)手動啟動程序方式

前台啟動程序:使用者手工輸入指令或者可執行程式的路徑,啟動的程序

啟動背景程序:需要使用“&”操作符,将“&”操作符放在要執行指令的最後面,程序啟動後會直接放入背景運作,而不占用前台的指令操作界面,友善使用者進行其他操作。

2)排程啟動程序方式

程序的排程啟動可以通過 at、crontab 指令進行設定,排程啟動的計劃任務程序均在背景運作,不會占用使用者的指令終端。

3)改變程序的運作方式(Ctrl+Z)

挂起目前的程序

  • 當 Linux 作業系統中的指令正在前台執行時(運作尚未結束),按 Ctrl+Z 組合鍵可以将目前程序挂起(調入背景并停止執行),這種操作在需要暫停目前程序并進行其他操作時用。
4)檢視背景的程序(jobs)
  • 需要檢視目前終端中在背景運作的程序任務時,可以使用 jobs 指令,結合“-l”選項可以同時顯示該程序對應的 PID 号。在 jobs 指令的輸出結果中,每一行記錄對應一個背景程序的狀态資訊,行首的數字表示該程序在背景的任務編号。若目前終端沒有背景程序,将不會顯示任何資訊。

    [[email protected] ~]# jobs -l

5)将背景的程序恢複運作(fg)
  • 使用 bg(BackGround,背景)指令,可以将背景中暫停執行(如按 Ctrl+Z 組合鍵挂起)的任務恢複運作,繼續在背景執行操作
  • 使用 fg 指令(ForeGround,前台),可以将背景任務重新恢複到前台運作
  • 除非背景中的任務隻有一個,否則 bg 和 fg 指令都需要指定背景程序的任務編号作為參數。

    [[email protected] ~]# fg 1

2、終止執行程序(kill、killall 和 pkill)

1)使用 kill 指令終止程序

通過 kill 指令終止程序時,需要使用程序的 PID 号作為參數。無特定選項時,kill 指令将給該程序發送終止信号并正常退出運作,若該程序已經無法響應終止信号,則可以結合“-9” 選項強行終止程序。強制終止程序時可能會導緻程式運作的部分資料丢失,是以不到不得已時不要輕易使用“-9”選項。

[[email protected] ~]# pgrep -l "sshd"	//查詢目标程序的PID 号
5822 sshd
[[email protected] ~]# kill 5822	//終止指定PID 的程序
[[email protected] ~]# pgrep -l "sshd"	//确認程序已終止(查詢時無結果)

[[email protected] ~]# vim file	//打開vim 程式并挂起作為測試
[1]+   Stopped	vim file
[[email protected] ~]# jobs -l	 //查詢目标程序的PID 号
[1]+   7095 Stopped	vim file
[[email protected] ~]# kill 7095		//嘗試正常結束程序
[[email protected] ~]# jobs -l			//但發現vim 程序并未退出
[1]+   7095 Stopped	vim file
[[email protected] ~]# kill -9 7095		//強制終止目标程序
[[email protected] ~]# jobs -l		//成功終止vim 程序
[1]+ 2993  已 殺死	vim file
           
2)使用 killall 指令終止程序
  • killall 指令可以通過程序名稱來終止程序,當需要結束系統中多個相同名稱的程序時,使用 killall 指令将更加友善,效率更高。
[[email protected] ~]# vim file1	//挂起第 1 個 vim 測試程序
[1]+   Stopped	vim file1
[[email protected] ~]# vim file2	//挂起第 2 個 vim 測試程序
[2]+   Stopped	vim file2
[[email protected] ~]# jobs -l		//确認待終止的程序資訊
[1]-   7144 Stopped	vim file1
[2]+   7153 Stopped	vim file2
[[email protected] ~]# killall -9 vim	//通過程序名終止多個程序
[[email protected] ~]# jobs -l
[1]-   7144 Killed	vim file1
[2]+   7153 Killed	vim file2
           
3)使用 pkill 指令終止程序
  • 使用 pkill 指令可以根據程序的名稱、運作該程序的使用者、程序所在的終端等多種屬性終止特定的程序,“-U”(指定使用者)、“-t”(指定終端)
[[email protected] ~]# pgrep –l -U "wlm"	  //确認目标程序相關資訊
3773 bash
[[email protected] ~]# pkill -9 -U "wlm"	  //強行終止使用者hackli 的程序
[[email protected] ~]# pgrep -l -U "wlm"	  //确認目标程序已被終止
           

繼續閱讀