歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux pgrep與kill的使用

Linux pgrep與kill的使用

日期:2017/2/28 15:33:42   编辑:Linux教程

想結束系統中指定的進程,有以下指令可能參考:

ps -ef | grep pure-ftpd | grep -v grep | awk '{print $2" "$3}' | xargs kill -9 = pkill pure-ftpd

killall -9 nginx 或者 kill -9 `ps aux |grep -i nginx |grep -v grep |awk '{print $2}'` = kill -9 `pgrep nginx`

以上是很常規的方法,下面我們介紹一種系統自帶的工具的用法。

名稱
pgrep, pkill(其實是pgrep的鏈接) – 查找或者發信號給進程通過名稱和其它屬性,我們能得到進程許多信息和通過這些來對其進行相關操作。

語法
pgrep [-flvx] [-n | -o] [-d delim] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-t termlist] [-c ctidlist] [-z zoneidlist] [pattern]

pkill [-signal] [-fvx] [-n | -o] [-P ppidlist] [-g pgrplist] [-s sidlist] [-u euidlist] [-U uidlist] [-G gidlist] [-J projidlist] [-t termlist] [-T taskidlist] [-c ctidlist] [-z zoneidlist] [pattern]

說明
  pgrep程序檢查在系統的中活動進程,報告進程屬性匹配命令行上指定條件的進程的ID。每一個進程ID以一個十進制數表示,通過一個分割字符串和下一個ID分開,默認的分割字符串是一個新行。對於每個屬性選項,用戶可以在命令行上指定一個以逗號分割的可能值的集合。

例如:
  pgrep -G other,daemon
  匹配真實組ID是other或者是daemon的進程。如果多個條件被指派,這些匹配條件按邏輯與"AND"規則運算。

例如:
  pgrep -G other,daemon -U root,daemon
  匹配進程它的屬性是:
  (真實的組ID是other或者是daemon) 與 (真實的用戶ID是root或者是daemon)。

  pkill函數和pgrep相同,除了匹配的進程被信號通知就像用kill(1)替代了pgrep的進程ID的輸出,一個信號名稱或者數字可以作為pkill的第一個命令行選項。

選項
  支持下面的選項:
  -c ctidlist  僅匹配列表中列出的ID的進程數。
# pgrep -c ssh -l
6

  -d delim  指定每一個匹配的進程ID之間分割字符串,如果沒有 -d 選項指定,默認的是新行字符,-d 選項僅在pgrep命令中有效。

  -f 正則表達式模式將執行與完全進程參數字符串 (從/proc/nnnnn/psinfo文件的pr_psargs字段獲得)匹配。如果沒有 -f 選項,表達式僅對執行文件名稱(從/proc/nnnnn/psinfo文件pr_fname字段獲得)匹配。
# pgrep -f ng -l
2159 nginx: master process /usr/sbin/nginx
2160 nginx: worker process
2222 hald-addon-input: Listening on /dev/input/event3 /dev/input/event2 /dev/input/event0
2230 hald-addon-acpi: listening on acpid socket /var/run/acpid.socket
2231 hald-addon-storage: polling /dev/hdc (every 2 sec)

  -g pgrplist 僅匹配進程組ID在給定列表中的進程,如果組0包括在列表中,這個被解釋為pgrep或者pkill進程的組ID。
# pgrep -g 2159 -l
2159 nginx(所有nginx進程的父進程)
2160 nginx

  -G gidlist 僅匹配真實組ID在給定列表中的進程,每一個組ID可以使用組名稱或者數字的組ID指定。
# pgrep -G 1000 -l
2388 sshd
2395 bash
2420 sshd
2421 sftp-server

  -l 長格式輸出,輸出每一個匹配進程的名稱連同進程ID,進程名稱從pr_psargs 或者 pr_fname字段獲得,依賴於-f選項是否指定。-l選項僅在pgrep命令中有效。

  -n 匹配最新(最近生成的)符合所有其它匹配條件的進程,不能和-o選項一起使用。

  -o 匹配最舊(最早生成的)符合所有其它匹配條件的進程,不能和-n選項一起使用。

  -P ppidlist 僅匹配給定列表中父進程ID的進程。
# pgrep -P 2159 -l
2160 nginx

  -s sidlist 僅匹配進程會話ID在給定列表中的進程,如果ID 0在列表中,這個解釋為pgrep或者pikill進程的會話ID。
# pgrep -s 2159 -l
2159 nginx
2160 nginx

  -t termlist 僅匹配與給定列表中終端關聯的進程,每一個終端指定為在/dev中終端設備路徑名稱的後綴。例如term/a 或者 pts/0。
# pgrep -t pts/1 -l
2395 bash

  -u euidlist 僅匹配有效用戶ID在給定列表中的進程,每個用戶ID可以通過一個登錄名稱或者數字的用戶ID指定。
# pgrep -u hto -l
2388 sshd
2395 bash

  -U uidlist 僅匹配真實的用戶ID在給定列表中的進程,每個用戶ID可以通過一個登錄名稱或者數字的用戶ID指定。
# pgrep -U hto -l
2388 sshd
2395 bash
2420 sshd
2421 sftp-server

  -v 反向匹配。匹配所有的進程除了符合匹配條件的。

  -x 僅認為進程的參數字符串或者執行文件名稱正確匹配規定模式是匹配的進程,模式被認為是准確的當所有在進程參數字符串或者可執行文件名稱的字符匹配模式。
# pgrep -d, -x nginx
2159,2160

  -z zoneidlist 僅匹配區域ID在給定列表中的進程,每一個區域ID可以使用一個區域名稱或者一個數字的區域ID指定,這個選項僅在全局區域中執行有效,如果pkill程序用來往其它區域的進程發信號,進城必須宣稱{PRIV_PROC_ZONE}特權。

  -signal 指定發往每一個匹配進程的信號。如果沒有指定,SIGTERM 是默認的信號。-signal僅在pkill命令中作為第一個選項有效。信號可以是在signal.h中定義的沒有SIG前綴的一個符號名字,也可是一個相應的信號數值。

操作

支持如下操作:
pattern
  指定一個擴展正則表達式(Extended Regular Expression (ERE))模式來匹配可執行文件名稱或者完整的進程參數字符串。ERE語法的完整描述參看regex(5)。

示例

例1 獲得一個進程的ID號
獲得nginx的進程ID:
$ pgrep -x -u root nginx
2123

例2 終止一個進程
終止最近生成的apache2:
$ pkill -n apache2

Example 3: Find the process ID of the named daemon:
$ pgrep -u root named

Example 4: Make syslog reread its configuration file:
$ pkill -HUP syslogd

Example 5: Give detailed information on all xterm processes:
$ ps -fp $(pgrep -d, -x xterm)

Exit Status
  如下退出值被返回:
  0 一個或者多個進程被匹配。
  1 沒有進程被匹配。
  2 指定了無效的命令行參數。
  3 出現一個致命的錯誤。

Copyright © Linux教程網 All Rights Reserved