CentOS 7上的進程管理

来源:https://www.cnblogs.com/alongdidi/archive/2019/08/06/linux_process.html
-Advertisement-
Play Games

一些雜亂的基礎概念 程式是一種靜態的文件,躺在磁碟上。而進程則是將程式運行起來放置於記憶體中。因此進程就是運行中的程式,是程式運行起來的一個實例。同一個程式可以運行為多個進程/實例。 進程之間有父子關係,即父進程與子進程之間的關係。父進程結束後,子進程也會隨之結束。因此,當我們通過終端連接上之後,隨即 ...


一些雜亂的基礎概念

程式是一種靜態的文件,躺在磁碟上。而進程則是將程式運行起來放置於記憶體中。因此進程就是運行中的程式,是程式運行起來的一個實例。同一個程式可以運行為多個進程/實例。

進程之間有父子關係,即父進程與子進程之間的關係。父進程結束後,子進程也會隨之結束。因此,當我們通過終端連接上之後,隨即啟用了一個與終端相關的shell進程(如bash),我們在該終端中運行的任何程式,都是這個終端的子進程。因此當我們在終端中運行一個需要長時間執行的程式,還未運行完畢便退出終端的話,那麼該長時間運行的程式也會自動結束掉的。

進程一般通過一些系統調用來創建,例如進程通過fork()或者clone()來複制自身創建新進程。

CentOS 6上最上層的進程是init進程,CentOS 7上最上層的進程是systemd進程。在一些情況下,父進程結束後,子進程還會存在,這類子進程被稱為孤兒進程(orphan process),它們會被init/systemd進程所“收養”。

進程有優先順序的概念,優先順序越低的進程可以享受越多的CPU資源。無法直接調整進程的優先順序,只能通過調整進程的nice值來改變,nice值越高進程優先順序越高(優先順序高越不優先)。可以理解為越高的nice值表示進程更願意占用更少的CPU資源。普通用戶只可以調高自身進程的nice值,只有root用戶才可以隨意調整nice值。

關於記憶體的一些基本概念,例如物理記憶體、虛擬記憶體、記憶體分頁和多級分頁表,推薦閱讀【Linux的記憶體分頁管理 - Vamei - 博客園】

進程間通信

  • 主機內部。
    • signal(信號)。
    • shm(SHared Memory,共用記憶體)。
    • semaphore(信號量)。
  • 主機之間。
    • RPC(Remote Procedure Call,遠程過程調用)。
    • socket。

進程類型

守護進程(daemon):一般是作為服務類的進程運行於系統後臺,與終端無關。一般是隨系統啟動的時候啟動,也可以在系統啟動後在終端手動啟動,啟動後會自動進入系統後臺。例如常見的httpd、nginx和mysqld等服務。

前臺進程:運行與前臺的進程,與終端相關,如果需要一段運行時間的話,會占用終端。例如我們基於php-cli工具手工運行一些php腳本。

進程根據占用資源的類型還可以分為CPU密集型(CPU-Bound)和IO密集型(IO-Bound)。

進程狀態

  • 運行態:running。
  • 就緒態:ready。
  • 睡眠態:分為兩種,可中斷(interruptable)睡眠和不可中斷(uninterruptable)睡眠。不可中斷的睡眠一般是由於進程在等待IO處理。
  • 停止態:stopped,處於記憶體中停止的狀態,不會占用CPU資源,除非手動啟動。
  • 僵死態:zombie,類似進程卡死吧,是一種不好的狀態。

init進程

在Linux系統中,操作系統在啟動過程中如何一步步啟動進程,系統如何管理進程與服務,這些都與一個初始化進程相關,那就是init進程。它一般是OS中最先啟動的進程,一般PID為0。在不同的CentOS版本中其對應的init進程不一樣。

目前大多數主流的Linux發行版採用Systemd方案。

 

 

命令

pstree

pstree用於以樹狀的形式顯示當前的進程。

[root@C7 ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager─┬─dhclient
        │                └─2*[{NetworkManager}]
        ├─VGAuthService
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───2*[{at-spi2-registr}]
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─colord───2*[{colord}]
        ├─crond
        ├─cupsd
        ├─2*[dbus-daemon]
        ├─dbus-launch
        ├─dnsmasq───dnsmasq
        ├─firewalld───{firewalld}
        ├─gdm─┬─X───5*[{X}]
        │     ├─gdm-session-wor─┬─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
        │     │                 │                 │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
        │     │                 │                 │             │             └─2*[{ibus-daemon}]
        │     │                 │                 │             └─20*[{gnome-shell}]
        │     │                 │                 ├─gsd-a11y-keyboa───3*[{gsd-a11y-keyboa}]
        │     │                 │                 ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
        │     │                 │                 ├─gsd-clipboard───2*[{gsd-clipboard}]
        │     │                 │                 ├─gsd-color───3*[{gsd-color}]
        │     │                 │                 ├─gsd-datetime───2*[{gsd-datetime}]
        │     │                 │                 ├─gsd-housekeepin───2*[{gsd-housekeepin}]
        │     │                 │                 ├─gsd-keyboard───3*[{gsd-keyboard}]
        │     │                 │                 ├─gsd-media-keys───3*[{gsd-media-keys}]
        │     │                 │                 ├─gsd-mouse───2*[{gsd-mouse}]
        │     │                 │                 ├─gsd-power───3*[{gsd-power}]
        │     │                 │                 ├─gsd-print-notif───2*[{gsd-print-notif}]
        │     │                 │                 ├─gsd-rfkill───2*[{gsd-rfkill}]
        │     │                 │                 ├─gsd-screensaver───2*[{gsd-screensaver}]
        │     │                 │                 ├─gsd-sharing───3*[{gsd-sharing}]
        │     │                 │                 ├─gsd-smartcard───4*[{gsd-smartcard}]
        │     │                 │                 ├─gsd-sound───3*[{gsd-sound}]
        │     │                 │                 ├─gsd-wacom───2*[{gsd-wacom}]
        │     │                 │                 ├─gsd-xsettings───3*[{gsd-xsettings}]
        │     │                 │                 └─3*[{gnome-session-b}]
        │     │                 └─2*[{gdm-session-wor}]
        │     └─3*[{gdm}]
        ├─gssproxy───5*[{gssproxy}]
        ├─ibus-portal───2*[{ibus-portal}]
        ├─ibus-x11───2*[{ibus-x11}]
        ├─irqbalance
        ├─ksmtuned───sleep
        ├─libvirtd───16*[{libvirtd}]
        ├─lsmd
        ├─lvmetad
        ├─master─┬─pickup
        │        └─qmgr
        ├─packagekitd───2*[{packagekitd}]
        ├─polkitd───5*[{polkitd}]
        ├─pulseaudio───2*[{pulseaudio}]
        ├─rngd
        ├─rpcbind
        ├─rsyslogd───2*[{rsyslogd}]
        ├─rtkit-daemon───2*[{rtkit-daemon}]
        ├─smartd
        ├─sshd─┬─sshd───bash───man───less
        │      └─sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ├─udisksd───4*[{udisksd}]
        ├─upowerd───2*[{upowerd}]
        ├─vmtoolsd───{vmtoolsd}
        ├─wpa_supplicant
        └─xdg-permission-───2*[{xdg-permission-}]

對於相同的子進程,pstree會將其摺疊,並使用數字顯示其相同子進程數。例如。

init-+-getty
      |-getty
      |-getty
      `-getty

會被摺疊成。

init---4*[getty]

子進程的摺疊顯示使用的是方括弧,而子線程的摺疊顯示使用了方括弧與花括弧。

icecast2---13*[{icecast2}]

-c:如果想要取消摺疊(compact)功能的話,可使用該選項。

-p:預設情況下,pstree不會顯示PID,加上該選項可實現顯示PID功能。該選項暗含了-c選項(禁用摺疊)。

知道了PID之後,pstree可加上PID參數,用來顯示以某個PID為根的進程樹。

[root@C7 ~]# pstree -p 1214
tuned(1214)─┬─{tuned}(1541)
            ├─{tuned}(1542)
            ├─{tuned}(1543)
            └─{tuned}(1558)

-a:顯示進程的命令行選項參數等。使用該選項有時會因為命令行參數太長而無法顯全,可結合-l選項查看長格式。

  ├─dbus-daemon --fork --print-pid 5 --print-address 7 --session
  ├─dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation

-h:高亮顯示當前進程以及祖先進程。

-H:高亮顯示指定PID進程以及祖先進程。

# pstree -H PID

-g:顯示進程的PGID(Process Group ID,進程組ID),我不懂什麼是進程組,從結果來看,子進程和進程的子線程的PGID等同於父進程的PID。同時顯示PID和PGID時,先顯示PID後顯示PGID。

-s:顯示進程的祖先進程。

[root@C7 ~]# pstree -p 1541
{tuned}(1541)
[root@C7 ~]# pstree -sp 1541
systemd(1)───tuned(1214)───{tuned}(1541)

-u:顯示進程的用戶名(UID),如果有的話。知道用戶名以後,用戶名可作為命令參數來顯示與該用戶名相關的進程樹。

[root@C7 ~]# pstree -p postfix
pickup(3311)

qmgr(1401)

 

ps

ps命令用於顯示當前系統上的進程信息,也叫做當前進程快照(snapshot)。

它支持三種風格的選項:

  • UNIX風格,選項可以被合併並且只能有一個連接號(-)。在man手冊中,UNIX風格,也叫做標準(standard)或者POSIX風格。
  • BSD風格,選項可以被合併並且不能有連接號(-)。
  • GNU長選項,必須有兩個連接號(-)。

由於ps有許多不同的版本,因此該版本(CentOS 7上的ps)為了相容性考慮,會存在許多功能相同的選項。不同風格的選項可以混合使用,但是可能會產生衝突,因此建議不要混合使用。

不同風格的選項名稱(字元)可能相同但不代表含義相同,例如以下2個命令,意義就不一樣。

# ps aux
# ps -aux

雖然它們顯示的結果是相同的,下文會解釋。

選項組合一:aux

a:使ps列出所有和終端(tty)相關的進程,當和x選項共同使用的時候顯示所有的進程。

x:使ps列出所有和你(應該是當前的有效UID,Effective UID)相關的進程,當和x選項共同使用的時候顯示所有的進程。

u:以面向用戶的格式輸出。

a和x選項屬於簡單進程選取(SIMPLE PROCESS SELECTION)類選項。

u選項屬於輸出格式控制(OUTPUT FORMAT CONTROL)類選項。

因此該組合的作用是:以面向用戶的格式,BSD的風格顯示系統上所有的進程信息。

[root@C7 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.2  0.4 191172  4168 ?        Ss   10:03   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    10:03   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    10:03   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   10:03   0:00 [kworker/0:0H]
...
root        499  0.0  0.3  37376  3496 ?        Ss   10:03   0:00 /usr/lib/systemd/systemd-journald
root        528  0.0  0.1 124792  1320 ?        Ss   10:03   0:00 /usr/sbin/lvmetad -f
root        532  0.0  0.3  45648  3032 ?        Ss   10:03   0:00 /usr/lib/systemd/systemd-udevd
...
root       1495  0.0  1.8 320832 18444 tty1     Ssl+ 10:03   0:00 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-lKoaJ3/database -seat seat0 -nolist
...
root       1949  0.0  0.3 116628  3256 pts/0    Ss   10:04   0:00 -bash
root       1990  0.0  0.2 119788  2472 pts/0    S+   10:05   0:00 man ps
root       2003  0.0  0.0 110336   980 pts/0    S+   10:05   0:00 less -s
...

我們再來看一下ps -aux的含義。

-a:選取除了會話首進程(session leader,相見getsid(2)的man手冊)和與終端無關的進程以外的所有進程。

-u:根據有效用戶ID(EUID)來選取進程。其後接的就是用戶名了。

因此,“-aux”的含義即選取滿足用戶名為“x”和-a選項條件的進程,如果不存在用戶x,那麼其效果等同於“aux”,這也就是為什麼在實際運行時,“ps aux”和“ps -aux”的結果是一樣的了。

接下來解釋幾個欄位的含義。

USER:進程所對應的用戶。

PID:進程ID。

%CPU:進程所占用的CPU百分比,占用的CPU時間/進程所運行的時間(cputime/realtime)。

%MEM:進程所占用的記憶體百分比。

VSZ:虛擬記憶體的大小,單位是KB。設備映射當前不包含;這點可能會改變。

RSS:Resident Size,常駐記憶體集,單位是KB。一個任務所使用到的非swap物理記憶體。

TTY:與進程所關聯的終端。

STAT:進程狀態。預設情況下,似乎進程的狀態只有在BSD風格的選項下才會被顯示。在UNIX風格的話,可能得通過-o來顯示了,並且使用了-o,就不可以使用其他UNIX風格的輸出格式控制了,例如-o和-f一起用是不行的。

  • R:running,運行態。
  • S:Interruptable Sleeping,可中斷睡眠態。
  • D:Uninterruptable Sleeping,不可中斷睡眠態。進程處於等待的時候,可以理解為睡眠,如果進程是等待網路或者磁碟的IO,這種一般是必須等待完畢才可以繼續運行進程的,那麼這種是不可中斷的睡眠狀態,反之則為可中斷。
  • T:Stopped,停止態。進程通過Ctrl+z調入後臺時處於該狀態。
  • Z:Zombie,僵死態。進程等待被回收。
  • +:前臺進程。
  • l:多線程進程。
  • N:低優先順序進程。具備nice值,對其他進程nice,因此這裡說的”優先順序“就真的是越低越不優先了。
  • <:高優先順序進程。
  • s:session leader,會話首進程。

START:進程所啟動的時間點。

TIME:進程所占用的CPU時間。

COMMAND:完整的命令行信息。

選項組合二:-ef

-e:選擇所有的進程,等同於-A。

-f:顯示長格式詳細信息。

[root@C7 ~]# ps -ef 
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 10:03 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 10:03 ?        00:00:00 [kthreadd]
root          3      2  0 10:03 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 10:03 ?        00:00:00 [kworker/0:0H]
...
root        691      1  0 10:03 ?        00:00:00 /sbin/auditd
root        693    691  0 10:03 ?        00:00:00 /sbin/audispd
root        695    693  0 10:03 ?        00:00:00 /usr/sbin/sedispatch
...
root       1495   1231  0 10:03 tty1     00:00:00 /usr/bin/X :0 -background none -noreset -audit 4 -verbose -auth /run/gdm/auth-for-gdm-lKoaJ3/database -seat seat0 -nolisten tcp vt1
...
root       1949   1943  0 10:04 pts/0    00:00:00 -bash
root       1990   1949  0 10:05 pts/0    00:00:00 man ps
root       2003   1990  0 10:05 pts/0    00:00:00 less -s
root       2017   1213  0 10:06 ?        00:00:00 sshd: root@pts/1
root       2023   2017  0 10:06 pts/1    00:00:00 -bash
...

UID:等同於ps aux輸出中的USER,進程的用戶。

PPID:該進程的父進程ID。

C:CPU的使用情況,等同於%CPU。

CMD:等同於COMMAND。

-f選項還可以結合其他的UNIX風格選項來增加額外的欄位信息。例如結合-L選項。

-L:顯示線程信息,NLWP表示線程數量,LWP表示線程ID。LWP的英文全稱是Light Weight Process,由此可見,線程即是輕量級的進程。

[root@C7 ~]# ps -efL | head -n 1
UID         PID   PPID    LWP  C NLWP STIME TTY          TIME CMD
[root@C7 ~]# ps -ef | grep "auditd"
root        109      2  0 10:03 ?        00:00:00 [kauditd]
root        691      1  0 10:03 ?        00:00:00 /sbin/auditd
root       6178   2023  0 15:41 pts/1    00:00:00 grep --color=auto auditd
[root@C7 ~]# ps -efL | grep "auditd"
root        109      2    109  0    1 10:03 ?        00:00:00 [kauditd]
root        691      1    691  0    2 10:03 ?        00:00:00 /sbin/auditd
root        691      1    692  0    2 10:03 ?        00:00:00 /sbin/auditd
root       6180   2023   6180  0    1 15:41 pts/1    00:00:00 grep --color=auto auditd

可見,原本/sbin/auditd只是一條進程信息,在顯示線程信息後,它顯示成了2條,PID相同,不過線程ID(LWP)不同。

選項組合三:-eFH

-F:基於-f選項,顯示比起更詳細的信息。

-H:以進程樹的格式顯示。

[root@C7 ~]# ps -eFH
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root          2      0  0     0     0   0 10:03 ?        00:00:00 [kthreadd]
root          3      2  0     0     0   0 10:03 ?        00:00:00   [ksoftirqd/0]
root          5      2  0     0     0   0 10:03 ?        00:00:00   [kworker/0:0H]
root          7      2  0     0     0   0 10:03 ?        00:00:00   [migration/0]
root          8      2  0     0     0   0 10:03 ?        00:00:00   [rcu_bh]
...
root          1      0  0 47793  4168   1 10:03 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root        499      1  0  9344  4028   0 10:03 ?        00:00:00   /usr/lib/systemd/systemd-journald
root        528      1  0 31198  1320   2 10:03 ?        00:00:00   /usr/sbin/lvmetad -f
root        532      1  0 11412  3032   1 10:03 ?        00:00:00   /usr/lib/systemd/systemd-udevd
root        691      1  0 13877   900   2 10:03 ?        00:00:00   /sbin/auditd
root        693    691  0 21138   936   0 10:03 ?        00:00:00     /sbin/audispd
root        695    693  0 13899  1416   0 10:03 ?        00:00:00       /usr/sbin/sedispatch
...

SZ:進程的core image的物理頁(page)大小。包含文本、數據和棧空間(stack space)。設備映射當前不包含;這點可能會改變。

PSR:進程目前在哪個CPU核心上運行。

選項組合四:-eo,axo

o, -o, --format:輸出格式的一種格式,可以讓用戶自定義顯示欄位信息。欄位信息是一個列表,以逗號或者空格分隔,一般以逗號。欄位信息使用關鍵詞(keyword)來表示,關鍵詞除了可用於-o選項顯示欄位信息外,還可用於--sort選項來分類排序。例如。

[root@C7 ~]# ps -eo pid,user,args --sort user | head
   PID USER     COMMAND
   731 avahi    avahi-daemon: running [C7.local]
   746 avahi    avahi-daemon: chroot helper
  1726 colord   /usr/libexec/colord
   744 dbus     /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
  1512 gdm      /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart
  1518 gdm      dbus-launch --exit-with-session /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/autostart
  1519 gdm      /usr/bin/dbus-daemon --fork --print-pid 5 --print-address 7 --session
  1526 gdm      /usr/libexec/at-spi-bus-launcher
  1531 gdm      /bin/dbus-daemon --config-file=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address 3

欄位名也可以置空或者根據需求重命名。如果全部置空的話,就不會顯示首行欄位名行了。

[root@C7 ~]# ps -eo pid,user=,args=mingling --sort user | head -n 3
   PID          mingling
   731 avahi    avahi-daemon: running [C7.local]
   746 avahi    avahi-daemon: chroot helper

欄位的寬度會自動調節,也可以在欄位名後面使用“:number”的形式來明確具體的寬度。

[root@C7 ~]# ps -eo uid:5,pid:10,ppid:30
  UID        PID                           PPID
    0          1                              0
    0          2                              0
    0          3                              2
    0          5                              2
    0          7                              2
    0          8                              2
...

當選項使用情況比較複雜的時候,可以使用多個-o選項。

具體的欄位關鍵詞,在ps(1)的man手冊中的STANDARD FORMAT SPECIFIERS中有描述。

       CODE        HEADER    DESCRIPTION

       %cpu        %CPU      cpu utilization of the process in "##.#" format.  Currently, it is the CPU time used divided by the
                             time the process has been running (cputime/realtime ratio), expressed as a percentage.  It will not
                             add up to 100% unless you are lucky.  (alias pcpu).

       %mem        %MEM      ratio of the process's resident set size  to the physical memory on the machine, expressed as a
                             percentage.  (alias pmem).
... ...

CODE:在CLI中需要輸入的關鍵詞。

HEADER:在輸出中顯示的首行欄位名稱。

DESCRIPTION:詳細的描述信息。

此前選項的輸出信息,如果某些欄位不明瞭,也是參考這部分的信息。

基於列表選取進程

上面所述的選項,在選取進程的時候,都是選擇某一類進程。例如-e、ax選項可選取所有進程等等。

除此之外還可基於列表,列表可以是用戶列表或者PID列表。

先來看基於用戶列表。

以不同的格式顯示有效UID和真實UID為postfix的進程。

-u:有效(effective)UID,即EUID。EUID用於文件訪問許可權的判斷。

-U:真實(real)UID,即RUID。RUID用戶識別創建進程的用戶。

[root@C7 ~]# ps -u postfix -U postfix -f
UID         PID   PPID  C STIME TTY          TIME CMD
postfix    1378   1374  0 11:04 ?        00:00:00 qmgr -l -t unix -u
postfix    3325   1374  0 12:44 ?        00:00:00 pickup -l -t unix -u
[root@C7 ~]# ps -u postfix -U postfix -F
UID         PID   PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
postfix    1378   1374  0 22968  4096   3 11:04 ?        00:00:00 qmgr -l -t unix -u
postfix    3325   1374  0 22951  4088   0 12:44 ?        00:00:00 pickup -l -t unix -u
[root@C7 ~]# ps -u postfix -U postfix u
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postfix    1378  0.0  0.4  91872  4096 ?        S    11:04   0:00 qmgr -l -t unix -u
postfix    3325  0.0  0.4  91804  4088 ?        S    12:44   0:00 pickup -l -t unix -u

在這個示例中,我們也看到了不同風格選項的使用。並且為了避免ps程式感到疑惑,我們將選項分開書寫,向下麵這個例子,就是寫在一起報錯了。

[root@C7 ~]# ps -uU postfix -F
error: user name does not exist

既然說是列表了,那麼用戶名也可以多個。

[root@C7 ~]# ps -u postfix,colord,rtkit -f
UID         PID   PPID  C STIME TTY          TIME CMD
rtkit       732      1  0 11:04 ?        00:00:00 /usr/libexec/rtkit-daemon
postfix    1378   1374  0 11:04 ?        00:00:00 qmgr -l -t unix -u
colord     1727      1  0 11:04 ?        00:00:00 /usr/libexec/colord
postfix    3325   1374  0 12:44 ?        00:00:00 pickup -l -t unix -u

再來看進程列表。

p PID_LIST
-p PID_LIST
--pid PID_LIST
--ppid PID_LIST
[root@C7 ~]# ps -p 732,1378,1727,3325 -f
UID         PID   PPID  C STIME TTY          TIME CMD
rtkit       732      1  0 11:04 ?        00:00:00 /usr/libexec/rtkit-daemon
postfix    1378   1374  0 11:04 ?        00:00:00 qmgr -l -t unix -u
colord     1727      1  0 11:04 ?        00:00:00 /usr/libexec/colord
postfix    3325   1374  0 12:44 ?        00:00:00 pickup -l -t unix -u

進程列表也可以只有一個PID,此情況下可以直接作為ps命令的參數。

# ps PID
# ps -PID

這種適合於引用可返回PID的命令結果,例如pgrep。

[root@C7 ~]# ps -p $(pgrep systemd)
   PID TTY      STAT   TIME COMMAND
     1 ?        Ss     0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
   498 ?        Ss     0:00 /usr/lib/systemd/systemd-journald
   534 ?        Ss     0:00 /usr/lib/systemd/systemd-udevd
   744 ?        Ss     0:00 /usr/lib/systemd/systemd-logind

也可以通過-C選項來實現同樣的功能。

-C cmdlist:根據命令名稱列表來匹配進程。

[root@C7 ~]# ps -C systemd,systemd-journald,systemd-udevd,systemd-logind -f
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 11:04 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root        498      1  0 11:04 ?        00:00:00 /usr/lib/systemd/systemd-journald
root        534      1  0 11:04 ?        00:00:00 /usr/lib/systemd/systemd-udevd
root        744      1  0 11:04 ?        00:00:00 /usr/lib/systemd/systemd-logind

這裡的列表,既不支持glob,也不支持RE。而且它是精確匹配。

[root@C7 ~]# ps -C "systemd*"
   PID TTY          TIME CMD
[root@C7 ~]# ps -C "systemd.*"
   PID TTY          TIME CMD
[root@C7 ~]# ps -C "system"
   PID TTY          TIME CMD

 

pgrep, pkill

pgrep基於pattern或者其他屬性查找進程,預設會輸出其PID。

pkill基於pattern或者其他屬性向進程發送信號(預設是SIGTERM),不會輸出進程信息。

# pgrep [options] pattern
# pkill [options] pattern

大部分選項是pgrep和pkill共用的,如果有專用,會單獨說明。

pgrep

為了做測試,我們安裝了一個apache httpd的服務。

# yum -y install httpd
# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2019-07-11 15:32:51 CST; 28min ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 5632 (httpd)
   Status: "Total requests: 10; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 9
   CGroup: /system.slice/httpd.service
           ├─5632 /usr/sbin/httpd -DFOREGROUND
           ├─5643 /usr/sbin/httpd -DFOREGROUND
           ├─5644 /usr/sbin/httpd -DFOREGROUND
           ├─5645 /usr/sbin/httpd -DFOREGROUND
           ├─5646 /usr/sbin/httpd -DFOREGROUND
           ├─5648 /usr/sbin/httpd -DFOREGROUND
           ├─5754 /usr/sbin/httpd -DFOREGROUND
           ├─5755 /usr/sbin/httpd -DFOREGROUND


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 炎炎夏日中想和小伙伴們開黑的同學可以進來看一下了,本教程教你搭建基於兩個平臺的Minecraft伺服器,這裡我以Minecraft 1.11.2版本為例給大家講解搭建流程。其中有Forge版本可以加入mods。 一、Windows下的Minecraft純凈(無Forge)伺服器搭建 1.獲取伺服器文 ...
  • Linux標準的讀音:哩吶科斯 Linux是一種類UNIX的系統,具有以下特點: 1、免費開源 2、模塊化程度高 3、廣泛的硬體支持 4、安全穩定 5、多用戶,多任務(所以常應用於系統運維,以及合作開發) 6、良好的可移植性 man文件 man 命令 查看某個命令的用法 空格鍵:翻頁 q:退出,結束 ...
  • 最近因為公司的伺服器需要做基線和漏洞掃描,基線方面問題不大,按照報告上的加固建議,選一些權重高的問題處理一下就好了。但是漏洞掃描就比較坑了,掃出來了十幾個高危和一百六十多個中危漏洞,不過還好漏洞基本上都出在openSSH和mysql上,升級一下這兩個的版本就好了。因為是雲主機openSSH不敢亂動, ...
  • MODBUS功能碼簡介 代碼 中文名稱 位操作/字操作 操作數量 01h 讀線圈狀態 位操作 單個或多個 02h 讀離散輸入狀態(只能讀到0或1) 位操作 單個或多個 03h 讀保持寄存器(保持寄存器可以通過06h功能寫入) 字操作 單個或多個 04h 讀輸入寄存器(輸入寄存器只能讀取,不能通過06 ...
  • 轉自:https://blog.csdn.net/sinat_29957455/article/details/89036005 在使用apt-get安裝程式的時候報: E: 無法打開鎖文件 /var/lib/dpkg/lock-frontend - open (2: 沒有那個文件或目錄)E: Un ...
  • 命令歷史: 查看已經使用過的命令 關於歷史命令的文件 每個用戶的家目錄下的./bash_history 在關機的時候,會自動寫入一次(history -r ) 手動寫入 關於歷史命令的變數(環境變數) env //查看環境變數 set //查看更詳細的環境變數參數 HISTSIZE=1000 //數 ...
  • 一、目的 windows向centos_linux伺服器上傳文件可以用ftp上傳,但是沒zmodem方便,zmodem拖拽上傳,可以上傳到指定的目錄下。 二、安裝使用 執行下麵的命令安裝後就可以使用了。 參考:https://blog.csdn.net/qq_35928732/article/det ...
  • 因客戶現場網路複雜,將windows系統的預設遠程埠3389歸入安全策略中,所以伺服器需要修改此埠,配置如下: 首先:登錄操作系統,win+R調出運行菜單後輸入regedit, 進入註冊表編輯相關遠程埠信息,按下麵的路徑進入修改埠: 1、找到HKEY_LOCAL_MACHINE\System ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...