Linux進程管理命令


ps

  查看進程,列出執行ps命令的那個時刻的進程快照。如果想要動態顯示,使用top命令

  參數格式:

    UNIX格式:一個"-"開頭

    BSD格式:沒有"-"開頭

    GNU長格式:兩個"-"開頭

  a  # 顯示與終端相關的所有進程,包含每個進程的完整路徑

  u  # 顯示進程的用戶信息

  x  # 顯示與終端無關的所有進程

  -a  # 顯示所有終端下執行的進程

  -u  # 顯示指定用戶相關的進程信息

  -e  # 顯示所有進程

  -f  # 額外顯示UUID PPID C與STIME欄位

  f  # 顯示進程樹

  -H  # 顯示進程樹

  -I  # 以詳細的格式來顯示進程的狀況

  -o  # 自定義輸出指定字段,以逗號分隔

[root@centos7 ~]# ps
   PID TTY          TIME CMD
  1525 pts/0    00:00:00 bash
  1884 pts/0    00:00:00 ps
[root@centos7 ~]# ps -ef      # 常用組合,UNIX格式組合 -e -f ,額外顯示UID,PPID,C與STIME欄位
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 10:04 ?        00:00:01 /usr/lib/systemd/systemd --switched-rroot          2      0  0 10:04 ?        00:00:00 [kthreadd]
root          3      2  0 10:04 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 10:04 ?        00:00:00 [kworker/0:0H]
root          7      2  0 10:04 ?        00:00:00 [migration/0]

  # UID  # 進程被該UID所擁有
  # PID  # 進程的標識號
  # PPID  # 進程的父進程的標識號
  # C    # CPU使用的資源百分比
  # STIME  # 進程開始的時間
  # tty   # 該進程實在哪個終端機上面運作,若與終端無關,則顯示?,tty1-tty6是本機上面的登入者進程,pts/0表示網絡連接進主機的進程
  # TIME  # 進程所使用的總的CPU時間
  # CMD   # 正在執行的命令
 
         
[root@centos7 ~]# ps aux      # BSD格式參數,使用a選項和x選項顯示所有進程 u顯示進程的用戶信息
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2  43680  4052 ?        Ss   10:04   0:01 /usr/lib/systemd/systroot          2  0.0  0.0      0     0 ?        S    10:04   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:04   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   10:04   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    10:04   0:00 [migration/0]    

  # USER    該進程所屬用戶
  # PID     該進程的進程號  
  # %CPU    該進程使用掉的CPU資源百分比 
  # %MEM    該進程所占用的內存百分比
  # VSZ     該進程使用掉的虛擬內存量
  # RSS     該進程占用的固定的內存量
  # TTY     該進程在那個終端機上面運行的
  # STAT
     R 正在運行  S 正在中斷睡眠中  D 不可中斷睡眠  T  正在偵測或者是停止了  Z  已經終止,或者zombie僵死進程,
     + 前台進程  l 多線程進程  N 低優先級進程  < 高優先級進程  s 進程領導者  L 已將頁面鎖定到內存中  
  # START 該進程被觸發啟動的時間  
  # TIME   該進程實際使用CPU運作的時間
  # COMMAND  該進程的實際命令


[root@centos7 ~]# ps -l  # UNIX格式參數,使用參數-l以詳細的格式顯示進程的狀況
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1525 1419 0 80 0 - 29122 do_wai pts/0 00:00:00 bash
0 R 0 1898 1525 0 80 0 - 38300 - pts/0 00:00:00 ps

    # F 代表這個進程的flag,4代表超級用戶

    # S 代表這個進程的狀態(STAT),

    # PRI  優先級Priorty的縮寫,執行順訊

    # NI  NICE值

    # ADDR  指出該進程在內存那個部分,如果是個running進程,一般是“-”

    # SZ    使用掉的內存大小

    # WCHAN  進程是否在運行當中,-表示正在運行 

pgrep

  顯示指定進程的pid命令,ps和grep命令的結合

  -u  顯示指定用戶的所有進程號

  

[root@centos7 ~]# pgrep sshd 
1251
1419
[root@centos7 ~]# pgrep -u root
1
2
3

kill

  終止進程

   kill [-s signal|-p] [-q sigval] [-a] [--] pid...

  -l  列出全部的信號名稱

  -p  指定kill命令只打印相關進程的進程號

  -s  指定要發送的信號

[root@centos7 ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP

[root@centos7 ~]# kill -l 9
KILL

    # HUP(1)    掛起,通常因終端掉線,或用戶退出而引發
    # INT2(2)    中斷,
    # QUIT(3)        退出
    # KILL(9)        立即結束進程的運行
    # TERM(15)    終止,系統關機時發送
    # TSTP            暫停進程的運行,

[root@centos7 ~]# kill -9 進程號碼

# mysql進程嚴禁使用kill -9 強制殺死

  特殊信號“0”

# kill有個特殊信號0,使用格式,kill -0 $pid 其中的-0表示不發送任何信號給$pid對應的進程,
但是仍然會對$pid是否存在對應的進程進行檢查,若進程存在,返回0.反之,返回1 一般腳本中會用到,來寫一個管理系統服務的腳本

 

killall

  通過進程名終止進程,需要連續執行幾次

  -u  終止指定用戶的進程

  -w  等待所有被終止的進程死去,如果進程停留在僵死狀態,那么killall可能會永久等待

  

pkill

  通過進程名終止指定的進程,可殺死指定進程及子進程

  -t  # 殺死指定終端的進程

  -u  # 殺死指定用戶的進程

  

[root@centos7 ~]# w
 13:59:12 up  3:54,  1 user,  load average: 0.08, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    10.0.0.1         10:04    8.00s  0.21s  0.05s w


[root@centos7 ~]# pkill crond          #  通過進程名
[root@centos7 ~]# systemctl status crond.service   
  
[root@centos7 ~]# pkill -t tty1          # 通過終端名
[root@centos7 ~]# pkill -u root          # 通過用戶名

top

  實時地對系統處理器狀態進行監控,能夠實時地顯示系統中各個進程占用的狀況

  -a  # 將進程按照使用內存排序

  -b  # 批處理的模式顯示進程信息,輸出結果可以傳遞給其他程序或寫入到文件中,配合-n使用,一直打到-n設置的閾值

  -c  # 顯示進程的整個命令路徑,而不是只顯示命令名稱

  -d  # 指定每兩次屏幕信息刷新之間的時間間隔

  -H  # 指定這個可以顯示每個線程的情況,否則就是進程的總的狀態

  -i  # 不顯示閑置或者僵死的進程狀態  

  -n  # top輸出信息更新的次數,完成后將推出top命令

  -p  # 顯示指定的進程信息

  

  交互式命令及說明

 Z,B,E,e   Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale      字體顏色,加粗,摘要/任務記憶量表
  l,t,m     Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info        切換摘要:'l'平均負載; 't' task/CPU狀態; m 內存信息
  0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode
  f,F,X     Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width

  L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right
  R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify
  c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify
  x,y     . Toggle highlights: 'x' sort field; 'y' running tasks
  z,b     . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y')
  u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria
  n,#,^O  . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s)
  C,...   . Toggle scroll coordinates msg for: up,down,left,right,home,end

  k,r       Manipulate tasks: 'k' kill; 'r' renice
  d or s    Set update interval
  W,Y       Write configuration file 'W'; Inspect other output 'Y'

 

top - 14:27:26 up 4:22, 1 user, load average: 0.08, 0.03, 0.05
Tasks:
96 total, 2 running, 94 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1865284 total, 1460360 free, 96264 used, 308660 buff/cache KiB Swap: 1048572 total, 1048572 free, 0 used. 1595216 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2029 root 20 0 0 0 0 R 0.3 0.0 0:00.14 kworker/0:1

第一行:任務隊列信息,同uptime命令的執行結果
   

  14:27:26    # 當前系統時間
  up  4:26    # 系統已經運行了4個半小時
  
1 user     # 當前有1個用戶登錄系統
  load average: 0.08, 0.03, 0.05    # 1分鍾,5分鍾,15分鍾的平均負載情況

第二行:Tasks為任務(進程)。上面的信息顯示為
  共有96個進程,處於運行狀態的有2個,94個在休眠,stoped狀態0個,zombie狀態有0個

第三行:CPU狀態信息
  us  # 用戶空間占用CPU的百分比
  sy  # 內核空間占用cpu的百分比
  ni  # 改變優先級的進程占用CPU的百分比
  id  # 空閑CPU百分比
  wa  # I/O等待只用CPU的百分比
  hi  # 硬中斷占用CPU的百分比
  si  # 軟中斷
  st  # 虛擬機占用CPU的百分比

第四行:內存狀態

  total  # 物理內存總量
  used   # 使用中的內存總量
  free   # 空閑內存總量
  buffers  # 緩沖的內存量

第五行:swap交換分區信息
  total  # 交換分區總量
  used   # 使用的交換區總量
  free    # 空閑交換區總量
  cached  # 緩存的內存量

第六行:給出的各進程(任務)的狀態監控
  PID  # 進程iD
  USER  # 進程所有者
  PR    # 進程優先級
  NI    # nice值,負值表示高優先級,正值表示低優先級
  VIRT    # 進程使用的虛擬內存總量,單位為KB
  RES    # 進程使用的,未被換出的物理內存大小,單位KB
  SHR    # 共享內存大小,單位為kb
  S      # 進程狀態,D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程
  %CPU    # 上次更新到現在的CPU時間占用百分比
  %MEM    # 進程使用的物理內存百分比
  TIME+    # 進程使用的物理內存百分比
  COMMAND  # 進程名稱

nohup

  用戶退出系統進程繼續工作。可以將程序以忽略掛起信號的方式運行起來,被運行程序的輸出信息將不會顯示到終端

  輸出信息寫入到當前目錄的nohup.out文件中,如果當前目錄的nohup.out文件不可寫,則輸出重定向到$HOME/nohup.out

strace

  跟蹤進程的系統調用,是一款程序調試工具,主要檢車一個應用程序所使用的系統調用以及他所接收的系統信息

  -c  統計每一個系統調用所執行的時間,次數,和出錯的次數

  -d  輸出關於標准錯誤的調試信息

  -f  跟蹤目標進程,以及目標進程創建的所有子進程

  -i  輸出系統調用的入口指針

  -q  進制輸出關於脫離的消息

  -r  輸出每一個系統調用的相對時間

  -t  在輸出的每一行前調用的相對時間

  -T  顯示每次系統調用所花費的時間

  -v  對於某些相關調用,把完整的環境變量,文件stat結構等打印出來

  -x  以16進制形式輸出非標准字符串

  -e  輸出過濾器,通過表達式,可以過濾掉你不想要的輸出

  -o  將strace的輸出寫入文件filename

  -p pid  指定要跟蹤的進程pid,要同時跟蹤多個pid,重復多次-p選項即可

[root@centos7 ~]# strace -tt -f /etc/init.d/network 
[root@centos7 ~]# strace -c /etc/init.d/network 
Usage: /etc/init.d/network {start|stop|status|restart|reload|force-reload}
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 44.53    0.000839         168         5           clone
 27.44    0.000517           1       382           rt_sigprocmask
  6.53    0.000123           5        26           read

# 上面的結果告訴我們調用了哪些系統函數,調用的次數是多少,消耗了多少時間等信息,這對我們分析程序來說是非常有用的

ltrace

  ltrace能夠跟蹤進程的庫函數調用,它會顯現出調用了那個庫函數,而strace則是跟蹤進程的每個系統調用

  和strace參數公用

runlevel

  輸出當前Linux系統的運行級別

  0    停機

  1    單用戶模式

  2    無網絡的多用戶模式

  3    多用戶模式

  5    圖形界面多用戶模式

  6    重啟

 

init

  初始化Linux進程,是所有Linux進程的父進程,進程號為1,主要任務一句/etc/inittab創建linux進程

  

service

[root@centos7 ~]# service --status-all    # 顯示所有服務狀態

 

  管理系統服務,比如start|stop|status|reload等等

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM