尘鱼 發表於 2019-8-6 15:30:00

CentOS 7上的进程管理

<h1>一些杂乱的基础概念</h1>
<p>程序是一种静态的文件,躺在磁盘上。而进程则是将程序运行起来放置于内存中。因此进程就是运行中的程序,是程序运行起来的一个实例。同一个程序可以运行为多个进程/实例。</p>
<p>进程之间有父子关系,即父进程与子进程之间的关系。父进程结束后,子进程也会随之结束。因此,当我们通过终端连接上之后,随即启用了一个与终端相关的shell进程(如bash),我们在该终端中运行的任何程序,都是这个终端的子进程。因此当我们在终端中运行一个需要长时间执行的程序,还未运行完毕便退出终端的话,那么该长时间运行的程序也会自动结束掉的。</p>
<p>进程一般通过一些系统调用来创建,例如进程通过fork()或者clone()来复制自身创建新进程。</p>
<p>CentOS 6上最上层的进程是init进程,CentOS 7上最上层的进程是systemd进程。在一些情况下,父进程结束后,子进程还会存在,这类子进程被称为孤儿进程(orphan process),它们会被init/systemd进程所“收养”。</p>
<p>进程有优先级的概念,优先级越低的进程可以享受越多的CPU资源。无法直接调整进程的优先级,只能通过调整进程的nice值来改变,nice值越高进程优先级越高(优先级高越不优先)。可以理解为越高的nice值表示进程更愿意占用更少的CPU资源。普通用户只可以调高自身进程的nice值,只有root用户才可以随意调整nice值。</p>
<p>关于内存的一些基本概念,例如物理内存、虚拟内存、内存分页和多级分页表,推荐阅读【Linux的内存分页管理 - Vamei - 博客园】。</p>
<h2>进程间通信</h2>
<ul>
<li>主机内部。
<ul>
<li>signal(信号)。</li>
<li>shm(SHared Memory,共享内存)。</li>
<li>semaphore(信号量)。</li>
</ul>
</li>
<li>主机之间。
<ul>
<li>RPC(Remote Procedure Call,远程过程调用)。</li>
<li>socket。</li>
</ul>
</li>
</ul>
<h2>进程类型</h2>
<p>守护进程(daemon):一般是作为服务类的进程运行于系统后台,与终端无关。一般是随系统启动的时候启动,也可以在系统启动后在终端手动启动,启动后会自动进入系统后台。例如常见的httpd、nginx和mysqld等服务。</p>
<p>前台进程:运行与前台的进程,与终端相关,如果需要一段运行时间的话,会占用终端。例如我们基于php-cli工具手工运行一些php脚本。</p>
<p>进程根据占用资源的类型还可以分为CPU密集型(CPU-Bound)和IO密集型(IO-Bound)。</p>
<h2>进程状态</h2>
<ul>
<li>运行态:running。</li>
<li>就绪态:ready。</li>
<li>睡眠态:分为两种,可中断(interruptable)睡眠和不可中断(uninterruptable)睡眠。不可中断的睡眠一般是由于进程在等待IO处理。</li>
<li>停止态:stopped,处于内存中停止的状态,不会占用CPU资源,除非手动启动。</li>
<li>僵死态:zombie,类似进程卡死吧,是一种不好的状态。</li>
</ul>
<h2>init进程</h2>
<p>在Linux系统中,操作系统在启动过程中如何一步步启动进程,系统如何管理进程与服务,这些都与一个初始化进程相关,那就是init进程。它一般是OS中最先启动的进程,一般PID为0。在不同的CentOS版本中其对应的init进程不一样。</p>
<ul>
<li>CentOS 5:SysV init。</li>
<li>CentOS 6:Upstart。</li>
<li>CentOS 7:Systemd。</li>
</ul>
<p>目前大多数主流的Linux发行版采用Systemd方案。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h1>命令</h1>
<h2>pstree</h2>
<p>pstree用于以树状的形式显示当前的进程。</p>
<div class="cnblogs_code">
<pre># pstree
systemd─┬─ModemManager───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{ModemManager}]
      ├─NetworkManager─┬─dhclient
      │                └─</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{NetworkManager}]
      ├─VGAuthService
      ├─</span><span style="color: rgba(128, 0, 128, 1)">2</span>*
      ├─abrtd
      ├─accounts</span>-daemon───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{accounts-<span style="color: rgba(0, 0, 0, 1)">daemon}]
      ├─alsactl
      ├─at</span>-spi-bus-laun─┬─dbus-<span style="color: rgba(0, 0, 0, 1)">daemon
      │               └─</span><span style="color: rgba(128, 0, 128, 1)">3</span>*[{at-spi-bus-<span style="color: rgba(0, 0, 0, 1)">laun}]
      ├─at</span>-spi2-registr───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{at-spi2-<span style="color: rgba(0, 0, 0, 1)">registr}]
      ├─atd
      ├─auditd─┬─audispd─┬─sedispatch
      │      │         └─{audispd}
      │      └─{auditd}
      ├─avahi</span>-daemon───avahi-<span style="color: rgba(0, 0, 0, 1)">daemon
      ├─bluetoothd
      ├─colord───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{colord}]
      ├─crond
      ├─cupsd
      ├─</span><span style="color: rgba(128, 0, 128, 1)">2</span>*
      ├─dbus</span>-<span style="color: rgba(0, 0, 0, 1)">launch
      ├─dnsmasq───dnsmasq
      ├─firewalld───{firewalld}
      ├─gdm─┬─X───</span><span style="color: rgba(128, 0, 128, 1)">5</span>*<span style="color: rgba(0, 0, 0, 1)">[{X}]
      │   ├─gdm</span>-session-wor─┬─gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{ibus-<span style="color: rgba(0, 0, 0, 1)">dconf}]
      │   │               │               │             │             ├─ibus</span>-engine-sim───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{ibus-engine-<span style="color: rgba(0, 0, 0, 1)">sim}]
      │   │               │               │             │             └─</span><span style="color: rgba(128, 0, 128, 1)">2</span>*[{ibus-<span style="color: rgba(0, 0, 0, 1)">daemon}]
      │   │               │               │             └─</span><span style="color: rgba(128, 0, 128, 1)">20</span>*[{gnome-<span style="color: rgba(0, 0, 0, 1)">shell}]
      │   │               │               ├─gsd</span>-a11y-keyboa───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-a11y-<span style="color: rgba(0, 0, 0, 1)">keyboa}]
      │   │               │               ├─gsd</span>-a11y-settin───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-a11y-<span style="color: rgba(0, 0, 0, 1)">settin}]
      │   │               │               ├─gsd</span>-clipboard───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">clipboard}]
      │   │               │               ├─gsd</span>-color───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">color}]
      │   │               │               ├─gsd</span>-datetime───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">datetime}]
      │   │               │               ├─gsd</span>-housekeepin───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">housekeepin}]
      │   │               │               ├─gsd</span>-keyboard───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">keyboard}]
      │   │               │               ├─gsd</span>-media-keys───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-media-<span style="color: rgba(0, 0, 0, 1)">keys}]
      │   │               │               ├─gsd</span>-mouse───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">mouse}]
      │   │               │               ├─gsd</span>-power───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">power}]
      │   │               │               ├─gsd</span>-print-notif───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-print-<span style="color: rgba(0, 0, 0, 1)">notif}]
      │   │               │               ├─gsd</span>-rfkill───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">rfkill}]
      │   │               │               ├─gsd</span>-screensaver───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">screensaver}]
      │   │               │               ├─gsd</span>-sharing───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">sharing}]
      │   │               │               ├─gsd</span>-smartcard───<span style="color: rgba(128, 0, 128, 1)">4</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">smartcard}]
      │   │               │               ├─gsd</span>-sound───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">sound}]
      │   │               │               ├─gsd</span>-wacom───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">wacom}]
      │   │               │               ├─gsd</span>-xsettings───<span style="color: rgba(128, 0, 128, 1)">3</span>*[{gsd-<span style="color: rgba(0, 0, 0, 1)">xsettings}]
      │   │               │               └─</span><span style="color: rgba(128, 0, 128, 1)">3</span>*[{gnome-session-<span style="color: rgba(0, 0, 0, 1)">b}]
      │   │               └─</span><span style="color: rgba(128, 0, 128, 1)">2</span>*[{gdm-session-<span style="color: rgba(0, 0, 0, 1)">wor}]
      │   └─</span><span style="color: rgba(128, 0, 128, 1)">3</span>*<span style="color: rgba(0, 0, 0, 1)">[{gdm}]
      ├─gssproxy───</span><span style="color: rgba(128, 0, 128, 1)">5</span>*<span style="color: rgba(0, 0, 0, 1)">[{gssproxy}]
      ├─ibus</span>-portal───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{ibus-<span style="color: rgba(0, 0, 0, 1)">portal}]
      ├─ibus</span>-x11───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{ibus-<span style="color: rgba(0, 0, 0, 1)">x11}]
      ├─irqbalance
      ├─ksmtuned───</span><span style="color: rgba(0, 0, 255, 1)">sleep</span><span style="color: rgba(0, 0, 0, 1)">
      ├─libvirtd───</span><span style="color: rgba(128, 0, 128, 1)">16</span>*<span style="color: rgba(0, 0, 0, 1)">[{libvirtd}]
      ├─lsmd
      ├─lvmetad
      ├─master─┬─pickup
      │      └─qmgr
      ├─packagekitd───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{packagekitd}]
      ├─polkitd───</span><span style="color: rgba(128, 0, 128, 1)">5</span>*<span style="color: rgba(0, 0, 0, 1)">[{polkitd}]
      ├─pulseaudio───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{pulseaudio}]
      ├─rngd
      ├─rpcbind
      ├─rsyslogd───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{rsyslogd}]
      ├─rtkit</span>-daemon───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{rtkit-<span style="color: rgba(0, 0, 0, 1)">daemon}]
      ├─smartd
      ├─sshd─┬─sshd───bash───</span><span style="color: rgba(0, 0, 255, 1)">man</span>───<span style="color: rgba(0, 0, 255, 1)">less</span><span style="color: rgba(0, 0, 0, 1)">
      │      └─sshd───bash───pstree
      ├─systemd</span>-<span style="color: rgba(0, 0, 0, 1)">journal
      ├─systemd</span>-<span style="color: rgba(0, 0, 0, 1)">logind
      ├─systemd</span>-<span style="color: rgba(0, 0, 0, 1)">udevd
      ├─tuned───</span><span style="color: rgba(128, 0, 128, 1)">4</span>*<span style="color: rgba(0, 0, 0, 1)">[{tuned}]
      ├─udisksd───</span><span style="color: rgba(128, 0, 128, 1)">4</span>*<span style="color: rgba(0, 0, 0, 1)">[{udisksd}]
      ├─upowerd───</span><span style="color: rgba(128, 0, 128, 1)">2</span>*<span style="color: rgba(0, 0, 0, 1)">[{upowerd}]
      ├─vmtoolsd───{vmtoolsd}
      ├─wpa_supplicant
      └─xdg</span>-permission-───<span style="color: rgba(128, 0, 128, 1)">2</span>*[{xdg-permission-}]</pre>
</div>
<p>对于相同的子进程,pstree会将其折叠,并使用数字显示其相同子进程数。例如。</p>
<div class="cnblogs_code">
<pre>init-+-<span style="color: rgba(0, 0, 0, 1)">getty
      </span>|-<span style="color: rgba(0, 0, 0, 1)">getty
      </span>|-<span style="color: rgba(0, 0, 0, 1)">getty
      `</span>-getty</pre>
</div>
<p>会被折叠成。</p>
<div class="cnblogs_code">
<pre>init---<span style="color: rgba(128, 0, 128, 1)">4</span>*</pre>
</div>
<p>子进程的折叠显示使用的是方括号,而子线程的折叠显示使用了方括号与花括号。</p>
<div class="cnblogs_code">
<pre>icecast2---<span style="color: rgba(128, 0, 128, 1)">13</span>*[{icecast2}]</pre>
</div>
<p>-c:如果想要取消折叠(compact)功能的话,可使用该选项。</p>
<p>-p:默认情况下,pstree不会显示PID,加上该选项可实现显示PID功能。该选项暗含了-c选项(禁用折叠)。</p>
<p>知道了PID之后,pstree可加上PID参数,用来显示以某个PID为根的进程树。</p>
<div class="cnblogs_code">
<pre># pstree -p <span style="color: rgba(128, 0, 128, 1)">1214</span><span style="color: rgba(0, 0, 0, 1)">
tuned(</span><span style="color: rgba(128, 0, 128, 1)">1214</span>)─┬─{tuned}(<span style="color: rgba(128, 0, 128, 1)">1541</span><span style="color: rgba(0, 0, 0, 1)">)
            ├─{tuned}(</span><span style="color: rgba(128, 0, 128, 1)">1542</span><span style="color: rgba(0, 0, 0, 1)">)
            ├─{tuned}(</span><span style="color: rgba(128, 0, 128, 1)">1543</span><span style="color: rgba(0, 0, 0, 1)">)
            └─{tuned}(</span><span style="color: rgba(128, 0, 128, 1)">1558</span>)</pre>
</div>
<p>-a:显示进程的命令行选项参数等。使用该选项有时会因为命令行参数太长而无法显全,可结合-l选项查看长格式。</p>
<div class="cnblogs_code">
<pre>├─dbus-daemon --fork --print-pid <span style="color: rgba(128, 0, 128, 1)">5</span> --print-address <span style="color: rgba(128, 0, 128, 1)">7</span> --<span style="color: rgba(0, 0, 0, 1)">session
├─dbus</span>-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation</pre>
</div>
<p>-h:高亮显示当前进程以及祖先进程。</p>
<p>-H:高亮显示指定PID进程以及祖先进程。</p>
<div class="cnblogs_code">
<pre># pstree -H PID</pre>
</div>
<p>-g:显示进程的PGID(Process Group ID,进程组ID),我不懂什么是进程组,从结果来看,子进程和进程的子线程的PGID等同于父进程的PID。同时显示PID和PGID时,先显示PID后显示PGID。</p>
<p>-s:显示进程的祖先进程。</p>
<div class="cnblogs_code">
<pre># pstree -p <span style="color: rgba(128, 0, 128, 1)">1541</span><span style="color: rgba(0, 0, 0, 1)">
{tuned}(</span><span style="color: rgba(128, 0, 128, 1)">1541</span><span style="color: rgba(0, 0, 0, 1)">)
# pstree -sp <span style="color: rgba(128, 0, 128, 1)">1541</span><span style="color: rgba(0, 0, 0, 1)">
systemd(</span><span style="color: rgba(128, 0, 128, 1)">1</span>)───tuned(<span style="color: rgba(128, 0, 128, 1)">1214</span>)───{tuned}(<span style="color: rgba(128, 0, 128, 1)">1541</span>)</pre>
</div>
<p>-u:显示进程的用户名(UID),如果有的话。知道用户名以后,用户名可作为命令参数来显示与该用户名相关的进程树。</p>
<div class="cnblogs_code">
<pre># pstree -<span style="color: rgba(0, 0, 0, 1)">p postfix
pickup(</span><span style="color: rgba(128, 0, 128, 1)">3311</span><span style="color: rgba(0, 0, 0, 1)">)

qmgr(</span><span style="color: rgba(128, 0, 128, 1)">1401</span>)</pre>
</div>
<p>&nbsp;</p>
<h2>ps</h2>
<p>ps命令用于显示当前系统上的进程信息,也叫做当前进程快照(snapshot)。</p>
<p>它支持三种风格的选项:</p>
<ul>
<li>UNIX风格,选项可以被合并并且只能有一个连接号(-)。在man手册中,UNIX风格,也叫做标准(standard)或者POSIX风格。</li>
<li>BSD风格,选项可以被合并并且不能有连接号(-)。</li>
<li>GNU长选项,必须有两个连接号(-)。</li>
</ul>
<p>由于ps有许多不同的版本,因此该版本(CentOS 7上的ps)为了兼容性考虑,会存在许多功能相同的选项。不同风格的选项可以混合使用,但是可能会产生冲突,因此建议不要混合使用。</p>
<p>不同风格的选项名称(字符)可能相同但不代表含义相同,例如以下2个命令,意义就不一样。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)"> aux
# </span><span style="color: rgba(0, 0, 255, 1)">ps</span> -aux</pre>
</div>
<p>虽然它们显示的结果是相同的,下文会解释。</p>
<h3>选项组合一:aux</h3>
<p>a:使ps列出所有和终端(tty)相关的进程,当和x选项共同使用的时候显示所有的进程。</p>
<p>x:使ps列出所有和你(应该是当前的有效UID,Effective UID)相关的进程,当和x选项共同使用的时候显示所有的进程。</p>
<p>u:以面向用户的格式输出。</p>
<p>a和x选项属于简单进程选取(SIMPLE PROCESS SELECTION)类选项。</p>
<p>u选项属于输出格式控制(OUTPUT FORMAT CONTROL)类选项。</p>
<p>因此该组合的作用是:<span style="color: rgba(255, 0, 0, 1)"><strong>以面向用户的格式,BSD的风格显示系统上所有的进程信息。</strong></span></p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)"> aux
USER      PID </span>%CPU %<span style="color: rgba(0, 0, 0, 1)">MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0.2</span><span style="color: rgba(128, 0, 128, 1)">0.4</span> <span style="color: rgba(128, 0, 128, 1)">191172</span><span style="color: rgba(128, 0, 128, 1)">4168</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">01</span> /usr/lib/systemd/systemd --switched-root --system --deserialize <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
root          </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">
root          </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>
root          </span><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> ?      S&lt;   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>
...
root      </span><span style="color: rgba(128, 0, 128, 1)">499</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span><span style="color: rgba(128, 0, 128, 1)">37376</span><span style="color: rgba(128, 0, 128, 1)">3496</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">journald
root      </span><span style="color: rgba(128, 0, 128, 1)">528</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.1</span> <span style="color: rgba(128, 0, 128, 1)">124792</span><span style="color: rgba(128, 0, 128, 1)">1320</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/lvmetad -<span style="color: rgba(0, 0, 0, 1)">f
root      </span><span style="color: rgba(128, 0, 128, 1)">532</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span><span style="color: rgba(128, 0, 128, 1)">45648</span><span style="color: rgba(128, 0, 128, 1)">3032</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">udevd
...
root       </span><span style="color: rgba(128, 0, 128, 1)">1495</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">1.8</span> <span style="color: rgba(128, 0, 128, 1)">320832</span> <span style="color: rgba(128, 0, 128, 1)">18444</span> tty1   Ssl+ <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/bin/X :<span style="color: rgba(128, 0, 128, 1)">0</span> -background none -noreset -audit <span style="color: rgba(128, 0, 128, 1)">4</span> -verbose -auth /run/gdm/auth-<span style="color: rgba(0, 0, 255, 1)">for</span>-gdm-lKoaJ3/database -seat seat0 -<span style="color: rgba(0, 0, 0, 1)">nolist
...
root       </span><span style="color: rgba(128, 0, 128, 1)">1949</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">116628</span><span style="color: rgba(128, 0, 128, 1)">3256</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    Ss   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> -<span style="color: rgba(0, 0, 0, 1)">bash
root       </span><span style="color: rgba(128, 0, 128, 1)">1990</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.2</span> <span style="color: rgba(128, 0, 128, 1)">119788</span><span style="color: rgba(128, 0, 128, 1)">2472</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    S+   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">05</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">man</span> <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)">
root       </span><span style="color: rgba(128, 0, 128, 1)">2003</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span> <span style="color: rgba(128, 0, 128, 1)">110336</span>   <span style="color: rgba(128, 0, 128, 1)">980</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    S+   <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">05</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">less</span> -<span style="color: rgba(0, 0, 0, 1)">s
...</span></pre>
</div>
<p>我们再来看一下ps -aux的含义。</p>
<p>-a:选取除了会话首进程(session leader,相见getsid(2)的man手册)和与终端无关的进程以外的所有进程。</p>
<p>-u:根据有效用户ID(EUID)来选取进程。其后接的就是用户名了。</p>
<p>因此,“-aux”的含义即选取满足用户名为“x”和-a选项条件的进程,如果不存在用户x,那么其效果等同于“aux”,这也就是为什么在实际运行时,“ps aux”和“ps -aux”的结果是一样的了。</p>
<p>接下来解释几个字段的含义。</p>
<p>USER:进程所对应的用户。</p>
<p>PID:进程ID。</p>
<p>%CPU:进程所占用的CPU百分比,占用的CPU时间/进程所运行的时间(cputime/realtime)。</p>
<p>%MEM:进程所占用的内存百分比。</p>
<p>VSZ:虚拟内存的大小,单位是KB。设备映射当前不包含;这点可能会改变。</p>
<p>RSS:Resident Size,常驻内存集,单位是KB。一个任务所使用到的非swap物理内存。</p>
<p>TTY:与进程所关联的终端。</p>
<p>STAT:进程状态。默认情况下,似乎进程的状态只有在BSD风格的选项下才会被显示。在UNIX风格的话,可能得通过-o来显示了,并且使用了-o,就不可以使用其他UNIX风格的输出格式控制了,例如-o和-f一起用是不行的。</p>
<ul>
<li>R:running,运行态。</li>
<li>S:Interruptable Sleeping,可中断睡眠态。</li>
<li>D:Uninterruptable Sleeping,不可中断睡眠态。进程处于等待的时候,可以理解为睡眠,如果进程是等待网络或者磁盘的IO,这种一般是必须等待完毕才可以继续运行进程的,那么这种是不可中断的睡眠状态,反之则为可中断。</li>
<li>T:Stopped,停止态。进程通过Ctrl+z调入后台时处于该状态。</li>
<li>Z:Zombie,僵死态。进程等待被回收。</li>
<li>+:前台进程。</li>
<li>l:多线程进程。</li>
<li>N:低优先级进程。具备nice值,对其他进程nice,因此这里说的”优先级“就真的是越低越不优先了。</li>
<li>&lt;:高优先级进程。</li>
<li>s:session leader,会话首进程。</li>
</ul>
<p>START:进程所启动的时间点。</p>
<p>TIME:进程所占用的CPU时间。</p>
<p>COMMAND:完整的命令行信息。</p>
<h3>选项组合二:-ef</h3>
<p>-e:选择所有的进程,等同于-A。</p>
<p>-f:显示长格式详细信息。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">ef
UID         PID   PPIDC STIME TTY          TIME CMD
root          </span><span style="color: rgba(128, 0, 128, 1)">1</span>      <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">02</span> /usr/lib/systemd/systemd --switched-root --system --deserialize <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
root          </span><span style="color: rgba(128, 0, 128, 1)">2</span>      <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">
root          </span><span style="color: rgba(128, 0, 128, 1)">3</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>
root          </span><span style="color: rgba(128, 0, 128, 1)">5</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>
...
root      </span><span style="color: rgba(128, 0, 128, 1)">691</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /sbin/<span style="color: rgba(0, 0, 0, 1)">auditd
root      </span><span style="color: rgba(128, 0, 128, 1)">693</span>    <span style="color: rgba(128, 0, 128, 1)">691</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /sbin/<span style="color: rgba(0, 0, 0, 1)">audispd
root      </span><span style="color: rgba(128, 0, 128, 1)">695</span>    <span style="color: rgba(128, 0, 128, 1)">693</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/<span style="color: rgba(0, 0, 0, 1)">sedispatch
...
root       </span><span style="color: rgba(128, 0, 128, 1)">1495</span>   <span style="color: rgba(128, 0, 128, 1)">1231</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> tty1   <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/bin/X :<span style="color: rgba(128, 0, 128, 1)">0</span> -background none -noreset -audit <span style="color: rgba(128, 0, 128, 1)">4</span> -verbose -auth /run/gdm/auth-<span style="color: rgba(0, 0, 255, 1)">for</span>-gdm-lKoaJ3/database -seat seat0 -<span style="color: rgba(0, 0, 0, 1)">nolisten tcp vt1
...
root       </span><span style="color: rgba(128, 0, 128, 1)">1949</span>   <span style="color: rgba(128, 0, 128, 1)">1943</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> -<span style="color: rgba(0, 0, 0, 1)">bash
root       </span><span style="color: rgba(128, 0, 128, 1)">1990</span>   <span style="color: rgba(128, 0, 128, 1)">1949</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">05</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">man</span> <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)">
root       </span><span style="color: rgba(128, 0, 128, 1)">2003</span>   <span style="color: rgba(128, 0, 128, 1)">1990</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">05</span> pts/<span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">less</span> -<span style="color: rgba(0, 0, 0, 1)">s
root       </span><span style="color: rgba(128, 0, 128, 1)">2017</span>   <span style="color: rgba(128, 0, 128, 1)">1213</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">06</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> sshd: root@pts/<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
root       </span><span style="color: rgba(128, 0, 128, 1)">2023</span>   <span style="color: rgba(128, 0, 128, 1)">2017</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">06</span> pts/<span style="color: rgba(128, 0, 128, 1)">1</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> -<span style="color: rgba(0, 0, 0, 1)">bash
...</span></pre>
</div>
<p>UID:等同于ps aux输出中的USER,进程的用户。</p>
<p>PPID:该进程的父进程ID。</p>
<p>C:CPU的使用情况,等同于%CPU。</p>
<p>CMD:等同于COMMAND。</p>
<p>-f选项还可以结合其他的UNIX风格选项来增加额外的字段信息。例如结合-L选项。</p>
<p>-L:显示线程信息,NLWP表示线程数量,LWP表示线程ID。LWP的英文全称是Light Weight Process,由此可见,线程即是轻量级的进程。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -efL | <span style="color: rgba(0, 0, 255, 1)">head</span> -n <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
UID         PID   PPID    LWPC NLWP STIME TTY          TIME CMD
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -ef | <span style="color: rgba(0, 0, 255, 1)">grep</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">auditd</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
root      </span><span style="color: rgba(128, 0, 128, 1)">109</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">
<span style="color: rgba(255, 0, 0, 1)"><strong>root      </strong></span></span><span style="color: rgba(255, 0, 0, 1)"><strong>691      10 10:03 ?      00:00:00 /sbin/</strong></span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><strong>auditd</strong></span>
root       </span><span style="color: rgba(128, 0, 128, 1)">6178</span>   <span style="color: rgba(128, 0, 128, 1)">2023</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">41</span> pts/<span style="color: rgba(128, 0, 128, 1)">1</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">grep</span> --color=<span style="color: rgba(0, 0, 0, 1)">auto auditd
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -efL | <span style="color: rgba(0, 0, 255, 1)">grep</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">auditd</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
root      </span><span style="color: rgba(128, 0, 128, 1)">109</span>      <span style="color: rgba(128, 0, 128, 1)">2</span>    <span style="color: rgba(128, 0, 128, 1)">109</span><span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">
<span style="color: rgba(255, 0, 0, 1)"><strong>root      </strong></span></span><span style="color: rgba(255, 0, 0, 1)"><strong>691      1    6910    2 10:03 ?      00:00:00 /sbin/auditd
root      691      1    6920    2 10:03 ?      00:00:00 /sbin/</strong></span><span style="color: rgba(0, 0, 0, 1)"><span style="color: rgba(255, 0, 0, 1)"><strong>auditd</strong></span>
root       </span><span style="color: rgba(128, 0, 128, 1)">6180</span>   <span style="color: rgba(128, 0, 128, 1)">2023</span>   <span style="color: rgba(128, 0, 128, 1)">6180</span><span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">41</span> pts/<span style="color: rgba(128, 0, 128, 1)">1</span>    <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">grep</span> --color=auto auditd</pre>
</div>
<p>可见,原本/sbin/auditd只是一条进程信息,在显示线程信息后,它显示成了2条,PID相同,不过线程ID(LWP)不同。</p>
<h3>选项组合三:-eFH</h3>
<p>-F:基于-f选项,显示比起更详细的信息。</p>
<p>-H:以进程树的格式显示。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">eFH
UID         PID   PPIDC    SZ   RSS PSR STIME TTY          TIME CMD
root          </span><span style="color: rgba(128, 0, 128, 1)">2</span>      <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">
root          </span><span style="color: rgba(128, 0, 128, 1)">3</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   
root          </span><span style="color: rgba(128, 0, 128, 1)">5</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   
root          </span><span style="color: rgba(128, 0, 128, 1)">7</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   
root          </span><span style="color: rgba(128, 0, 128, 1)">8</span>      <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span><span style="color: rgba(0, 0, 0, 1)">   
...
root          </span><span style="color: rgba(128, 0, 128, 1)">1</span>      <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">47793</span><span style="color: rgba(128, 0, 128, 1)">4168</span>   <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">02</span> /usr/lib/systemd/systemd --switched-root --system --deserialize <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
root      </span><span style="color: rgba(128, 0, 128, 1)">499</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">9344</span><span style="color: rgba(128, 0, 128, 1)">4028</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">journald
root      </span><span style="color: rgba(128, 0, 128, 1)">528</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">31198</span><span style="color: rgba(128, 0, 128, 1)">1320</span>   <span style="color: rgba(128, 0, 128, 1)">2</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   /usr/sbin/lvmetad -<span style="color: rgba(0, 0, 0, 1)">f
root      </span><span style="color: rgba(128, 0, 128, 1)">532</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11412</span><span style="color: rgba(128, 0, 128, 1)">3032</span>   <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">udevd
root      </span><span style="color: rgba(128, 0, 128, 1)">691</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">13877</span>   <span style="color: rgba(128, 0, 128, 1)">900</span>   <span style="color: rgba(128, 0, 128, 1)">2</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   /sbin/<span style="color: rgba(0, 0, 0, 1)">auditd
root      </span><span style="color: rgba(128, 0, 128, 1)">693</span>    <span style="color: rgba(128, 0, 128, 1)">691</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">21138</span>   <span style="color: rgba(128, 0, 128, 1)">936</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>   /sbin/<span style="color: rgba(0, 0, 0, 1)">audispd
root      </span><span style="color: rgba(128, 0, 128, 1)">695</span>    <span style="color: rgba(128, 0, 128, 1)">693</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">13899</span><span style="color: rgba(128, 0, 128, 1)">1416</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">10</span>:<span style="color: rgba(128, 0, 128, 1)">03</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>       /usr/sbin/<span style="color: rgba(0, 0, 0, 1)">sedispatch
...</span></pre>
</div>
<p>SZ:进程的core image的物理页(page)大小。包含文本、数据和栈空间(stack space)。设备映射当前不包含;这点可能会改变。</p>
<p>PSR:进程目前在哪个CPU核心上运行。</p>
<h3>选项组合四:-eo,axo</h3>
<p>o, -o, --format:输出格式的一种格式,可以让用户自定义显示字段信息。字段信息是一个列表,以逗号或者空格分隔,一般以逗号。字段信息使用关键词(keyword)来表示,关键词除了可用于-o选项显示字段信息外,还可用于--sort选项来分类排序。例如。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -eo pid,user,args --<span style="color: rgba(0, 0, 255, 1)">sort</span> user | <span style="color: rgba(0, 0, 255, 1)">head</span><span style="color: rgba(0, 0, 0, 1)">
   PID USER   COMMAND
   </span><span style="color: rgba(128, 0, 128, 1)">731</span> avahi    avahi-<span style="color: rgba(0, 0, 0, 1)">daemon: running
   </span><span style="color: rgba(128, 0, 128, 1)">746</span> avahi    avahi-daemon: <span style="color: rgba(0, 0, 255, 1)">chroot</span><span style="color: rgba(0, 0, 0, 1)"> helper
</span><span style="color: rgba(128, 0, 128, 1)">1726</span> colord   /usr/libexec/<span style="color: rgba(0, 0, 0, 1)">colord
   </span><span style="color: rgba(128, 0, 128, 1)">744</span> dbus   /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-<span style="color: rgba(0, 0, 0, 1)">activation
</span><span style="color: rgba(128, 0, 128, 1)">1512</span> gdm      /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/<span style="color: rgba(0, 0, 0, 1)">autostart
</span><span style="color: rgba(128, 0, 128, 1)">1518</span> gdm      dbus-launch --exit-with-session /usr/libexec/gnome-session-binary --autostart /usr/share/gdm/greeter/<span style="color: rgba(0, 0, 0, 1)">autostart
</span><span style="color: rgba(128, 0, 128, 1)">1519</span> gdm      /usr/bin/dbus-daemon --fork --print-pid <span style="color: rgba(128, 0, 128, 1)">5</span> --print-address <span style="color: rgba(128, 0, 128, 1)">7</span> --<span style="color: rgba(0, 0, 0, 1)">session
</span><span style="color: rgba(128, 0, 128, 1)">1526</span> gdm      /usr/libexec/at-spi-bus-<span style="color: rgba(0, 0, 0, 1)">launcher
</span><span style="color: rgba(128, 0, 128, 1)">1531</span> gdm      /bin/dbus-daemon --config-<span style="color: rgba(0, 0, 255, 1)">file</span>=/usr/share/defaults/at-spi2/accessibility.conf --nofork --print-address <span style="color: rgba(128, 0, 128, 1)">3</span></pre>
</div>
<p>字段名也可以置空或者根据需求重命名。如果全部置空的话,就不会显示首行字段名行了。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -eo pid,user=,args=mingling --<span style="color: rgba(0, 0, 255, 1)">sort</span> user | <span style="color: rgba(0, 0, 255, 1)">head</span> -n <span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">
   PID          mingling
   </span><span style="color: rgba(128, 0, 128, 1)">731</span> avahi    avahi-<span style="color: rgba(0, 0, 0, 1)">daemon: running
   </span><span style="color: rgba(128, 0, 128, 1)">746</span> avahi    avahi-daemon: <span style="color: rgba(0, 0, 255, 1)">chroot</span> helper</pre>
</div>
<p>字段的宽度会自动调节,也可以在字段名后面使用“:number”的形式来明确具体的宽度。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -eo uid:<span style="color: rgba(128, 0, 128, 1)">5</span>,pid:<span style="color: rgba(128, 0, 128, 1)">10</span>,ppid:<span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">
UID      PID                           PPID
    </span><span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">1</span>                              <span style="color: rgba(128, 0, 128, 1)">0</span>
    <span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">2</span>                              <span style="color: rgba(128, 0, 128, 1)">0</span>
    <span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">3</span>                              <span style="color: rgba(128, 0, 128, 1)">2</span>
    <span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">5</span>                              <span style="color: rgba(128, 0, 128, 1)">2</span>
    <span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">7</span>                              <span style="color: rgba(128, 0, 128, 1)">2</span>
    <span style="color: rgba(128, 0, 128, 1)">0</span>          <span style="color: rgba(128, 0, 128, 1)">8</span>                              <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
...</span></pre>
</div>
<p>当选项使用情况比较复杂的时候,可以使用多个-o选项。</p>
<p>具体的字段关键词,在ps(1)的man手册中的STANDARD FORMAT SPECIFIERS中有描述。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">       CODE      HEADER    DESCRIPTION

       </span>%cpu      %CPU      cpu utilization of the process <span style="color: rgba(0, 0, 255, 1)">in</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">##.#</span><span style="color: rgba(128, 0, 0, 1)">"</span> format.Currently, it is the CPU <span style="color: rgba(0, 0, 255, 1)">time</span><span style="color: rgba(0, 0, 0, 1)"> used divided by the
                           </span><span style="color: rgba(0, 0, 255, 1)">time</span> the process has been running (cputime/<span style="color: rgba(0, 0, 0, 1)">realtime ratio), expressed as a percentage.It will not
                           add up to </span><span style="color: rgba(128, 0, 128, 1)">100</span>%<span style="color: rgba(0, 0, 0, 1)"> unless you are lucky.(alias pcpu).

       </span>%mem      %MEM      ratio of the process<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s resident set sizeto the physical memory on the machine, expressed as a</span>
                           percentage.(alias pmem).<br>... ...</pre>
</div>
<p>CODE:在CLI中需要输入的关键词。</p>
<p>HEADER:在输出中显示的首行字段名称。</p>
<p>DESCRIPTION:详细的描述信息。</p>
<p>此前选项的输出信息,如果某些字段不明了,也是参考这部分的信息。</p>
<h3>基于列表选取进程</h3>
<p>上面所述的选项,在选取进程的时候,都是选择某一类进程。例如-e、ax选项可选取所有进程等等。</p>
<p>除此之外还可基于列表,列表可以是用户列表或者PID列表。</p>
<p>先来看基于用户列表。</p>
<p>以不同的格式显示有效UID和真实UID为postfix的进程。</p>
<p>-u:有效(effective)UID,即EUID。EUID用于文件访问权限的判断。</p>
<p>-U:真实(real)UID,即RUID。RUID用户识别创建进程的用户。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -u postfix -U postfix -<span style="color: rgba(0, 0, 0, 1)">f
UID         PID   PPIDC STIME TTY          TIME CMD
postfix    </span><span style="color: rgba(128, 0, 128, 1)">1378</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> qmgr -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
postfix    </span><span style="color: rgba(128, 0, 128, 1)">3325</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">12</span>:<span style="color: rgba(128, 0, 128, 1)">44</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> pickup -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -u postfix -U postfix -<span style="color: rgba(0, 0, 0, 1)">F
UID         PID   PPIDC    SZ   RSS PSR STIME TTY          TIME CMD
postfix    </span><span style="color: rgba(128, 0, 128, 1)">1378</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">22968</span><span style="color: rgba(128, 0, 128, 1)">4096</span>   <span style="color: rgba(128, 0, 128, 1)">3</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> qmgr -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
postfix    </span><span style="color: rgba(128, 0, 128, 1)">3325</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">22951</span><span style="color: rgba(128, 0, 128, 1)">4088</span>   <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">12</span>:<span style="color: rgba(128, 0, 128, 1)">44</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> pickup -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -u postfix -<span style="color: rgba(0, 0, 0, 1)">U postfix u
USER      PID </span>%CPU %<span style="color: rgba(0, 0, 0, 1)">MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
postfix    </span><span style="color: rgba(128, 0, 128, 1)">1378</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.4</span><span style="color: rgba(128, 0, 128, 1)">91872</span><span style="color: rgba(128, 0, 128, 1)">4096</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> qmgr -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
postfix    </span><span style="color: rgba(128, 0, 128, 1)">3325</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.4</span><span style="color: rgba(128, 0, 128, 1)">91804</span><span style="color: rgba(128, 0, 128, 1)">4088</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">12</span>:<span style="color: rgba(128, 0, 128, 1)">44</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> pickup -l -t unix -u</pre>
</div>
<p>在这个示例中,我们也看到了不同风格选项的使用。并且为了避免ps程序感到疑惑,我们将选项分开书写,向下面这个例子,就是写在一起报错了。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -uU postfix -<span style="color: rgba(0, 0, 0, 1)">F
error: user name does not exist</span></pre>
</div>
<p>既然说是列表了,那么用户名也可以多个。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -u postfix,colord,rtkit -<span style="color: rgba(0, 0, 0, 1)">f
UID         PID   PPIDC STIME TTY          TIME CMD
rtkit       </span><span style="color: rgba(128, 0, 128, 1)">732</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/libexec/rtkit-<span style="color: rgba(0, 0, 0, 1)">daemon
postfix    </span><span style="color: rgba(128, 0, 128, 1)">1378</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> qmgr -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
colord   </span><span style="color: rgba(128, 0, 128, 1)">1727</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/libexec/<span style="color: rgba(0, 0, 0, 1)">colord
postfix    </span><span style="color: rgba(128, 0, 128, 1)">3325</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">12</span>:<span style="color: rgba(128, 0, 128, 1)">44</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> pickup -l -t unix -u</pre>
</div>
<p>再来看进程列表。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">p PID_LIST
</span>-<span style="color: rgba(0, 0, 0, 1)">p PID_LIST
</span>--<span style="color: rgba(0, 0, 0, 1)">pid PID_LIST
</span>--ppid PID_LIST</pre>
</div>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -p <span style="color: rgba(128, 0, 128, 1)">732</span>,<span style="color: rgba(128, 0, 128, 1)">1378</span>,<span style="color: rgba(128, 0, 128, 1)">1727</span>,<span style="color: rgba(128, 0, 128, 1)">3325</span> -<span style="color: rgba(0, 0, 0, 1)">f
UID         PID   PPIDC STIME TTY          TIME CMD
rtkit       </span><span style="color: rgba(128, 0, 128, 1)">732</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/libexec/rtkit-<span style="color: rgba(0, 0, 0, 1)">daemon
postfix    </span><span style="color: rgba(128, 0, 128, 1)">1378</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> qmgr -l -t unix -<span style="color: rgba(0, 0, 0, 1)">u
colord   </span><span style="color: rgba(128, 0, 128, 1)">1727</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/libexec/<span style="color: rgba(0, 0, 0, 1)">colord
postfix    </span><span style="color: rgba(128, 0, 128, 1)">3325</span>   <span style="color: rgba(128, 0, 128, 1)">1374</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">12</span>:<span style="color: rgba(128, 0, 128, 1)">44</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> pickup -l -t unix -u</pre>
</div>
<p>进程列表也可以只有一个PID,此情况下可以直接作为ps命令的参数。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)"> PID
# </span><span style="color: rgba(0, 0, 255, 1)">ps</span> -PID</pre>
</div>
<p>这种适合于引用可返回PID的命令结果,例如pgrep。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -<span style="color: rgba(0, 0, 0, 1)">p $(pgrep systemd)
   PID TTY      STAT   TIME COMMAND
   </span><span style="color: rgba(128, 0, 128, 1)">1</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">02</span> /usr/lib/systemd/systemd --switched-root --system --deserialize <span style="color: rgba(128, 0, 128, 1)">22</span>
   <span style="color: rgba(128, 0, 128, 1)">498</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">journald
   </span><span style="color: rgba(128, 0, 128, 1)">534</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">udevd
   </span><span style="color: rgba(128, 0, 128, 1)">744</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-logind</pre>
</div>
<p>也可以通过-C选项来实现同样的功能。</p>
<p>-C cmdlist:根据命令名称列表来匹配进程。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -C systemd,systemd-journald,systemd-udevd,systemd-logind -<span style="color: rgba(0, 0, 0, 1)">f
UID         PID   PPIDC STIME TTY          TIME CMD
root          </span><span style="color: rgba(128, 0, 128, 1)">1</span>      <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">02</span> /usr/lib/systemd/systemd --switched-root --system --deserialize <span style="color: rgba(128, 0, 128, 1)">22</span><span style="color: rgba(0, 0, 0, 1)">
root      </span><span style="color: rgba(128, 0, 128, 1)">498</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">journald
root      </span><span style="color: rgba(128, 0, 128, 1)">534</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-<span style="color: rgba(0, 0, 0, 1)">udevd
root      </span><span style="color: rgba(128, 0, 128, 1)">744</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">11</span>:<span style="color: rgba(128, 0, 128, 1)">04</span> ?      <span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/lib/systemd/systemd-logind</pre>
</div>
<p>这里的列表,既不支持glob,也不支持RE。而且它是精确匹配。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -C <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">systemd*</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
   PID TTY          TIME CMD
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -C <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">systemd.*</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
   PID TTY          TIME CMD
# <span style="color: rgba(0, 0, 255, 1)">ps</span> -C <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">system</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
   PID TTY          TIME CMD</span></pre>
</div>
<p>&nbsp;</p>
<h2>pgrep, pkill</h2>
<p>pgrep基于pattern或者其他属性查找进程,默认会输出其PID。</p>
<p>pkill基于pattern或者其他属性向进程发送信号(默认是SIGTERM),不会输出进程信息。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># pgrep pattern
# pkill pattern</span></pre>
</div>
<p>大部分选项是pgrep和pkill共用的,如果有专用,会单独说明。</p>
<h3>pgrep</h3>
<p>为了做测试,我们安装了一个apache httpd的服务。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">yum</span> -y <span style="color: rgba(0, 0, 255, 1)">install</span><span style="color: rgba(0, 0, 0, 1)"> httpd
# systemctl status httpd
● httpd.service </span>-<span style="color: rgba(0, 0, 0, 1)"> The Apache HTTP Server
   Loaded: loaded (</span>/usr/lib/systemd/system/<span style="color: rgba(0, 0, 0, 1)">httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu </span><span style="color: rgba(128, 0, 128, 1)">2019</span>-<span style="color: rgba(128, 0, 128, 1)">07</span>-<span style="color: rgba(128, 0, 128, 1)">11</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">32</span>:<span style="color: rgba(128, 0, 128, 1)">51</span><span style="color: rgba(0, 0, 0, 1)"> CST; 28min ago
   Docs: </span><span style="color: rgba(0, 0, 255, 1)">man</span>:httpd(<span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">)
         </span><span style="color: rgba(0, 0, 255, 1)">man</span>:apachectl(<span style="color: rgba(128, 0, 128, 1)">8</span><span style="color: rgba(0, 0, 0, 1)">)
Main PID: </span><span style="color: rgba(128, 0, 128, 1)">5632</span><span style="color: rgba(0, 0, 0, 1)"> (httpd)
   Status: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Total requests: 10; Current requests/sec: 0; Current traffic:   0 B/sec</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
    Tasks: </span><span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">
   CGroup: </span>/system.slice/<span style="color: rgba(0, 0, 0, 1)">httpd.service
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5632</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5643</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5644</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5645</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5646</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5648</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5754</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         ├─</span><span style="color: rgba(128, 0, 128, 1)">5755</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
         └─</span><span style="color: rgba(128, 0, 128, 1)">5756</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND

Jul </span><span style="color: rgba(128, 0, 128, 1)">11</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">31</span>:<span style="color: rgba(128, 0, 128, 1)">29</span> C7 systemd[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]: Starting The Apache HTTP Server...
Jul </span><span style="color: rgba(128, 0, 128, 1)">11</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">32</span>:<span style="color: rgba(128, 0, 128, 1)">12</span> C7 httpd[<span style="color: rgba(128, 0, 128, 1)">5632</span>]: AH00558: httpd: Could not reliably determine the server<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">s fully qualified domain name, using fe80::7ebe:48aa:260c:1099. Set the </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">ServerName... this message
Jul </span><span style="color: rgba(128, 0, 128, 1)">11</span> <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">32</span>:<span style="color: rgba(128, 0, 128, 1)">51</span> C7 systemd[<span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use </span>-l to show <span style="color: rgba(0, 0, 255, 1)">in</span> full.</pre>
</div>
<p>这里的pattern,是基于程序文件名称来匹配的。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">COMMAND
</span>/usr/sbin/<span style="color: rgba(255, 0, 0, 1)"><strong>httpd</strong></span> -DFOREGROUND</pre>
</div>
<p>就是上面红色粗体字部分,其余部分不是用来和pattern进行匹配的。如果你匹配“sbin”或者“FORE”,那么是无法匹配出来的。</p>
<p>匹配是模糊匹配,“httpd”可被“http”所匹配。</p>
<p>默认返回pattern的PID。</p>
<div class="cnblogs_code">
<pre># pgrep httpd
</span><span style="color: rgba(128, 0, 128, 1)">5632</span>
<span style="color: rgba(128, 0, 128, 1)">5643</span>
<span style="color: rgba(128, 0, 128, 1)">5644</span>
<span style="color: rgba(128, 0, 128, 1)">5645</span>
<span style="color: rgba(128, 0, 128, 1)">5646</span>
<span style="color: rgba(128, 0, 128, 1)">5648</span>
<span style="color: rgba(128, 0, 128, 1)">5754</span>
<span style="color: rgba(128, 0, 128, 1)">5755</span>
<span style="color: rgba(128, 0, 128, 1)">5756</span><span style="color: rgba(0, 0, 0, 1)"><br></span></pre>
</div>
<p>可通过命令结果引用显示对应的进程信息。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span><span style="color: rgba(0, 0, 0, 1)"> $(pgrep httpd)
   PID TTY      STAT   TIME COMMAND
</span><span style="color: rgba(128, 0, 128, 1)">5632</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5643</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5644</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5645</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5646</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5648</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5754</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5755</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">5756</span> ?      S      <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND<br></span></pre>
</div>
<p>-c, --count:返回匹配pattern的进程统计计数,没匹配到就返回0。</p>
<div class="cnblogs_code">
<pre># pgrep -<span style="color: rgba(0, 0, 0, 1)">c httpd
</span><span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">
# pgrep -<span style="color: rgba(0, 0, 0, 1)">c redis
</span><span style="color: rgba(128, 0, 128, 1)">0</span></pre>
</div>
<p>-f, --full:上面我们说了,pattern的匹配,是仅根据程序文件名称,不包括程序的路径、命令选项、命令参数等。而启用该选项的话,就可以对整个完整的进程信息进行匹配了。</p>
<div class="cnblogs_code">
<pre># pgrep -<span style="color: rgba(0, 0, 0, 1)">c GROUND
</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
# pgrep -<span style="color: rgba(0, 0, 0, 1)">cf GROUND
</span><span style="color: rgba(128, 0, 128, 1)">9</span><span style="color: rgba(0, 0, 0, 1)">
# pgrep -<span style="color: rgba(0, 0, 0, 1)">c sbin
</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">
# pgrep -<span style="color: rgba(0, 0, 0, 1)">cf sbin
</span><span style="color: rgba(128, 0, 128, 1)">35</span></pre>
</div>
<p>-l, --list-name:默认情况下只显示PID,使用该选项还可显示进程名称。不过仅仅只是进程名称而已,一般使用-a选项来代替它。</p>
<p>-a, --list-full:显示PID和完整的命令行信息。-l和-a都是仅适用于pgrep。</p>
<div class="cnblogs_code">
<pre># pgrep -<span style="color: rgba(0, 0, 0, 1)">a httpd
</span><span style="color: rgba(128, 0, 128, 1)">2129</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2148</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2149</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2150</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2152</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2153</span> /usr/sbin/httpd -DFOREGROUND</pre>
</div>
<p>-P, --parent ppid,...:根据父进程ID来过滤。</p>
<div class="cnblogs_code">
<pre># pgrep -a -P <span style="color: rgba(128, 0, 128, 1)">2129</span>
<span style="color: rgba(128, 0, 128, 1)">2148</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2149</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2150</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2152</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2153</span> /usr/sbin/httpd -DFOREGROUND</pre>
</div>
<p>-u, --euid euid,...:根据用户名或者UID来过滤进程。</p>
<div class="cnblogs_code">
<pre># pgrep -a -<span style="color: rgba(0, 0, 0, 1)">u apache
</span><span style="color: rgba(128, 0, 128, 1)">2148</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2149</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2150</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2152</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
</span><span style="color: rgba(128, 0, 128, 1)">2153</span> /usr/sbin/httpd -DFOREGROUND</pre>
</div>
<p>显示属主为root的sshd进程。</p>
<div class="cnblogs_code">
<pre># pgrep -u root sshd</pre>
</div>
<p>显示属主为postfix或者nobody的进程。</p>
<div class="cnblogs_code">
<pre># pgrep -u postfix,nobody</pre>
</div>
<p>-v, --inverse:反向匹配,等同于“grep -v”。不过该选项的意义并不大,尤其是在使用pkill的时候,容易误kill进程。因此pkill情况下只能使用长选项--inverse。不过还是建议不使用该选项,尤其是pkill。</p>
<p>-x, --exact:精确匹配。默认是上面说的模糊匹配。例如这个进程。</p>
<div class="cnblogs_code">
<pre># /usr/bin/dnsmasq --conf-<span style="color: rgba(0, 0, 255, 1)">file</span>=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper</pre>
</div>
<p>默认情况下,“dns”或者“masq”都可以匹配到。使用该选项后,必须使用“dnsmasq”。</p>
<p>如果搭配-f选项的话,那么必须使用“/usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper”才可以匹配成功。</p>
<p>pgrep一般用于命令结果引用,结合其他命令一起使用。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">显示所有xterm进程的信息。
$ </span><span style="color: rgba(0, 0, 255, 1)">ps</span> -fp $(pgrep -d, -<span style="color: rgba(0, 0, 0, 1)">x xterm)
调整所有netscape进程的nice值。
$ </span><span style="color: rgba(0, 0, 255, 1)">renice</span> +<span style="color: rgba(128, 0, 128, 1)">4</span> $(pgrep netscape)</pre>
</div>
<h3>pkill</h3>
<p>向某类进程发送信号。默认发送的是SIGTERM信号,因此这里终止了所有的httpd进程。</p>
<div class="cnblogs_code">
<pre># pkill httpd</pre>
</div>
<p>我本人不太建议使用pkill来终止服务类的进程,因为这么做,会造成这类进程的状态异常。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190715153858898-37905016.png" alt=""></p>
<p>即便在再次启动服务后,也会有异常。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190715153937396-1785553999.png" alt=""></p>
<p>应该使用systemd来管理服务类进程。</p>
<p>可指定其他信号。</p>
<div class="cnblogs_code">
<pre># pkill -<span style="color: rgba(0, 0, 0, 1)">SIG ...
# pkill </span>--signal SIG ...</pre>
</div>
<p>关于信号,在kill命令中会介绍。</p>
<p>&nbsp;</p>
<h2>pidof</h2>
<p>返回进程的PID。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">pidof</span> [-s] [-c] [-n] [-x] [-m] [-o omitpid[,omitpid..]][-o omitpid[,omitpid..]..]program </pre>
</div>
<p>program,一般是命令的名称或者完整路径,不可带命令的选项。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> -f <span style="color: rgba(128, 0, 128, 1)">760</span><span style="color: rgba(0, 0, 0, 1)">
UID         PID   PPIDC STIME TTY      STAT   TIME CMD
root      </span><span style="color: rgba(128, 0, 128, 1)">760</span>      <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">09</span>:<span style="color: rgba(128, 0, 128, 1)">38</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">01</span> /sbin/rngd -<span style="color: rgba(0, 0, 0, 1)">f
# <span style="color: rgba(0, 0, 255, 1)">pidof</span><span style="color: rgba(0, 0, 0, 1)"> rngd
</span><span style="color: rgba(128, 0, 128, 1)">760</span><span style="color: rgba(0, 0, 0, 1)">
# <span style="color: rgba(0, 0, 255, 1)">pidof</span> /sbin/<span style="color: rgba(0, 0, 0, 1)">rngd
</span><span style="color: rgba(128, 0, 128, 1)">760</span><span style="color: rgba(0, 0, 0, 1)">
# <span style="color: rgba(0, 0, 255, 1)">pidof</span> /sbin/rngd -<span style="color: rgba(0, 0, 0, 1)">f
</span><span style="color: rgba(0, 0, 255, 1)">pidof</span>: invalid options on command line!<span style="color: rgba(0, 0, 0, 1)">

# <span style="color: rgba(0, 0, 255, 1)">pidof</span> <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/sbin/rngd -f</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
#</pre>
</div>
<p>当进程有多个PID的时候,返回多个,以空格作为分隔符。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">pidof</span><span style="color: rgba(0, 0, 0, 1)"> httpd
</span><span style="color: rgba(128, 0, 128, 1)">2237</span> <span style="color: rgba(128, 0, 128, 1)">2236</span> <span style="color: rgba(128, 0, 128, 1)">2235</span> <span style="color: rgba(128, 0, 128, 1)">2234</span> <span style="color: rgba(128, 0, 128, 1)">2233</span> <span style="color: rgba(128, 0, 128, 1)">2211</span><span style="color: rgba(0, 0, 0, 1)"><br></span></pre>
</div>
<p>我看了pidof的其他选项,有点懵逼,并且我感觉这个命令的作用不是很大,和pgrep的功能似乎是一样的。</p>
<p>pidof和killall5是同一个程序。后者用于向除了线程和自身会话的进程以外的所有进程发送信号。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ls</span> -l /usr/sbin/<span style="color: rgba(0, 0, 255, 1)">pidof</span><span style="color: rgba(0, 0, 0, 1)">
lrwxrwxrwx. </span><span style="color: rgba(128, 0, 128, 1)">1</span> root root <span style="color: rgba(128, 0, 128, 1)">18</span> Sep <span style="color: rgba(128, 0, 128, 1)">27</span><span style="color: rgba(128, 0, 128, 1)">2018</span> /usr/sbin/<span style="color: rgba(0, 0, 255, 1)">pidof</span> -&gt; /usr/sbin/killall5</pre>
</div>
<p>&nbsp;</p>
<h2>top</h2>
<p>ps命令,以快照的形式显示系统当前进程信息。如果想要以动态的形式显示进程信息的话,则可以使用top命令。</p>
<p>直接键入top回车后,如图显示。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190719111727189-1321367706.png" alt=""></p>
<p>默认情况下,是每隔3秒变化一次,最上面的部分是一些汇总信息,中间空行是用于用户键入,下面的剩余部分是进程信息,进程信息默认以PID字段升序排序。</p>
<p>在该界面下,可通过直接键入命令来做一些管理,例如控制变化间隔时间、排序字段、汇总信息显示等。</p>
<p>常用的命令有2个。</p>
<p>h:显示简要帮助信息。</p>
<p>q:退出top。</p>
<p>注意,在默认情况下,由于只能显示一个屏幕,因此进程信息是不全的。</p>
<h3>输出信息说明</h3>
<p>注意:如果有涉及到内存的但是没有给出单位,那么单位应该是KB。打算以不同的单位来换算的话,详见man手册中的e和E交互式命令。</p>
<h4>第一行</h4>
<p>第一行输出的信息,刚好是uptime命令所输出的信息。详见下文的uptime命令。</p>
<h4>第二行</h4>
<div class="cnblogs_code">
<pre>Tasks: <span style="color: rgba(128, 0, 128, 1)">187</span> total,   <span style="color: rgba(128, 0, 128, 1)">1</span> running, <span style="color: rgba(128, 0, 128, 1)">186</span> sleeping,   <span style="color: rgba(128, 0, 128, 1)">0</span> stopped,   <span style="color: rgba(128, 0, 128, 1)">0</span> zombie</pre>
</div>
<p>系统任务信息汇总,即进程的相关信息。</p>
<p>一共有187个进程,1个在运行,186个处于睡眠状态,没有停止和僵尸进程。</p>
<h4>第三行</h4>
<div class="cnblogs_code">
<pre>%Cpu(s):<span style="color: rgba(128, 0, 128, 1)">0.0</span> us,<span style="color: rgba(128, 0, 128, 1)">1.6</span> sy,<span style="color: rgba(128, 0, 128, 1)">0.0</span> ni, <span style="color: rgba(128, 0, 128, 1)">98.4</span> <span style="color: rgba(0, 0, 255, 1)">id</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span> wa,<span style="color: rgba(128, 0, 128, 1)">0.0</span> hi,<span style="color: rgba(128, 0, 128, 1)">0.0</span> si,<span style="color: rgba(128, 0, 128, 1)">0.0</span> st</pre>
</div>
<p>us:表示用户(user)空间中的进程所占用的CPU资源百分比。这类进程是没有修改过nice值的,即un-niced。</p>
<p>sy:表示内核空间中的进程所占用的CPU资源百分比。即系统(system)所使用的资源。</p>
<p>ni:表示用户空间中,调整过nice值得进程所占用的CPU资源百分比。</p>
<p>id:表示CPU处于空闲(idle)状态的百分比。</p>
<p>wa:表示CPU处于等待IO(IO-wait)状态的百分比。</p>
<p>hi:表示CPU处于硬中断时间的百分比。</p>
<p>si:表示CPU处于软中断时间的百分比。</p>
<p>st:表示用于虚拟机服务的时间百分比。</p>
<h4>第四行</h4>
<div class="cnblogs_code">
<pre>KiB Mem :   <span style="color: rgba(128, 0, 128, 1)">997980</span> total,   <span style="color: rgba(128, 0, 128, 1)">133396</span> <span style="color: rgba(0, 0, 255, 1)">free</span>,   <span style="color: rgba(128, 0, 128, 1)">464344</span> used,   <span style="color: rgba(128, 0, 128, 1)">400240</span> buff/cache</pre>
</div>
<p>这行表示的是物理内存。</p>
<p>total:总内存。</p>
<p>free:完全空闲的内存。</p>
<p>used:真实已使用的内存。</p>
<p>buff/cache:被使用的内存中(不是used),用于buffer或者cache的部分,这部分是还可以再利用的。因此我们看一个系统的物理内存剩余情况,一般要看free+buff/cache的和值。</p>
<div class="cnblogs_code">
<pre>total=<span style="color: rgba(0, 0, 255, 1)">free</span>+used+buff/cache</pre>
</div>
<h4>第五行</h4>
<div class="cnblogs_code">
<pre>KiB Swap:<span style="color: rgba(128, 0, 128, 1)">2097148</span> total,<span style="color: rgba(128, 0, 128, 1)">2097148</span> <span style="color: rgba(0, 0, 255, 1)">free</span>,      <span style="color: rgba(128, 0, 128, 1)">0</span> used.   <span style="color: rgba(128, 0, 128, 1)">318028</span> avail Mem</pre>
</div>
<p>swap表示的是交换分区。交换分区一般是物理磁盘上的区域,用于当内存资源不足的时候,系统依据某些算法(如LRU)将内存中数据交换到磁盘中的交换分区上存放。</p>
<p>因此交换分区肯定是系统可以不使用,那是最好的。毕竟物理磁盘的速度远远慢于内存。</p>
<p>在man手册中,也将这部分称之为了虚拟内存。(存疑)应该是相对于物理内存,所以才这么说的。</p>
<p>前面三个字段很好理解,分别表示了交换分区的总量(total)、剩余(free)和已使用(used)。</p>
<p>在我们的实验机上,由于没有负载,物理内存完全够用,因此这里是完全没有用到swap分区,这很棒!</p>
<p>avail Mem:表示在不使用交换分区的情况下,如果启用一个新的程序,那么系统上有多少物理内存资源可用。这是一个近似值。不像free字段,it attempts to account for&nbsp;readily reclaimable page cache and memory slabs. 它和内核的版本也有关系,在3.14上是可用的,在2.6.27+上是仿真的,其他情况下等同于free。</p>
<h4>第六行</h4>
<div class="cnblogs_code">
<pre>Change delay from <span style="color: rgba(128, 0, 128, 1)">3.0</span> to</pre>
</div>
<p>这行一般情况下是空的,用于命令的提示和键入命令等。例如我们交互式命令d用于修改刷新间隔,然后会在该行出现提示,要求我们输入新的刷新间隔时间。</p>
<h4>第七行</h4>
<div class="cnblogs_code">
<pre>   PID USER      PRNI    VIRT    RES    SHR S%CPU %MEM   TIME+<span style="color: rgba(0, 0, 0, 1)"> COMMAND                                                                                                            
   </span><span style="color: rgba(128, 0, 128, 1)">757</span> root      <span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>   <span style="color: rgba(128, 0, 128, 1)">21668</span>   <span style="color: rgba(128, 0, 128, 1)">1296</span>    <span style="color: rgba(128, 0, 128, 1)">988</span> S   <span style="color: rgba(128, 0, 128, 1)">0.7</span><span style="color: rgba(128, 0, 128, 1)">0.1</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00.13</span><span style="color: rgba(0, 0, 0, 1)"> irqbalance                                                                                                         
</span><span style="color: rgba(128, 0, 128, 1)">2111</span> root      <span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">161988</span>   <span style="color: rgba(128, 0, 128, 1)">2360</span>   <span style="color: rgba(128, 0, 128, 1)">1592</span> R   <span style="color: rgba(128, 0, 128, 1)">0.7</span><span style="color: rgba(128, 0, 128, 1)">0.2</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00.05</span><span style="color: rgba(0, 0, 0, 1)"> top                                                                                                                  
    </span><span style="color: rgba(128, 0, 128, 1)">37</span> root      <span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>       <span style="color: rgba(128, 0, 128, 1)">0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span> S   <span style="color: rgba(128, 0, 128, 1)">0.3</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00.46</span> kworker/<span style="color: rgba(128, 0, 128, 1)">1</span>:<span style="color: rgba(128, 0, 128, 1)">1</span>                                                                                                         
   <span style="color: rgba(128, 0, 128, 1)">113</span> root      <span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>       <span style="color: rgba(128, 0, 128, 1)">0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span> S   <span style="color: rgba(128, 0, 128, 1)">0.3</span><span style="color: rgba(128, 0, 128, 1)">0.0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00.42</span> kworker/<span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">2</span></pre>
</div>
<p>常见的就不再说明了。</p>
<p>PR:任务的调度优先级(scheduling priority)。越小越优先。如果值为rt的话,表示任务运行于实时调度优先级下。实时优先级的意思可能是任务总是可以抢占(preempt)CPU的资源。</p>
<p>NI:任务的nice值,越小越优先级。这个值的变化,也会影响到PR。NI值为-20的时候,PR值会为0。</p>
<p>VIRT:虚拟内存的总值。包含了所有的代码、数据和共享库,加上被交换出去的页面和被映射但是还未使用的页面。</p>
<p>RES:常驻(resident)内存的大小。常驻内存应该才是我们所通常说的内存,而上面的VIRT包含了许多其他的“内存”例如swap等。</p>
<p>SHR:共享(shared)内存的大小。并不是所有的共享内存都是常驻的,它只是反映了潜在地可被共享给其他进程的内存大小。</p>
<p>S:进程状态。D(不可中断睡眠)、R(运行)、S(睡眠)、T(被作业控制信号所停止)、t(在追踪的过程中被调试器所停止)和Z(僵尸进程)。</p>
<p>%CPU:可简单的理解为CPU占用百分比,不过它是可以超过100%的,具体可见man手册的字段说明。</p>
<p>%MEM:指物理内存占用的百分比。即常驻内存。</p>
<p>TIME+:和TIME字段的含义是相同的,表示进程占用CPU的总时间,不过该字段的反馈更加细粒度,可精确到百分之一秒。</p>
<p>COMMAND:就是命令了,默认情况下只显示命令的名称,可通过交互式命令c来切换命令名称与命令行的显示。命令行的意思就是带参数的完全的命令。显示命令行的情况下,内核显示会以中括号的形式显示,例如“”。</p>
<h3>选项说明</h3>
<p>-v和-h:用于显示库版本以及选项使用提示。</p>
<div class="cnblogs_code">
<pre># top -<span style="color: rgba(0, 0, 0, 1)">v
或者
# top </span>-<span style="color: rgba(0, 0, 0, 1)">h
procps</span>-ng version <span style="color: rgba(128, 0, 128, 1)">3.3</span>.<span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">
Usage:
top </span>-hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -<span style="color: rgba(0, 0, 255, 1)">w</span> </pre>
</div>
<p>top的选项,可以不加连接号(-)或者不需要空格。知道即可,一般不会这么使用。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)"># top h
# top v</span></pre>
</div>
<p>-d #:以指定的时间间隔刷新,单位是秒,默认是3秒。</p>
<p>-b:启用批处理(batch)模式。默认情况下的top输出,是输出到屏幕,并且在每个间隔时间后刷新一次,刷新的数据会<span style="color: rgba(255, 0, 0, 1)"><strong>覆盖</strong></span>之前的数据。而启用批处理模式后,每次输出都不会进行覆盖操作,这有利于我们将top的结果输出到其他程序或文件中。如果结合-n选项的话,可指定批处理模式在运行几次后自动退出,否则就需要用户自己键入Ctrl+c来退出。批处理模式下显示的进程信息是全的。</p>
<div class="cnblogs_code">
<pre># top -b -n <span style="color: rgba(128, 0, 128, 1)">3</span></pre>
</div>
<blockquote>
<p>本打算像pgrep/pkill那样看man手册来尽可能详述一下,但是看到top的man手册如此大的篇幅量,暂且放弃了,列出一些马哥说的常用的即可。</p>
<p>另外,个人感觉,当内功心法(计算机基础、英语等)不够的时候,不可以直接就上来学习一些上乘的武功(比如直接照着一个几千行的man手册等)。</p>
</blockquote>
<h3>排序</h3>
<p>M:以%MEM内存字段排序。</p>
<p>N:以PID字段排序。</p>
<p>P:以CPU使用率%CPU字段排序。</p>
<p>T:以使用CPU时间TIME+字段排序。</p>
<p>R:上面说的四个排序字段,默认都是降序排序,想要改变升降序的话,使用R。</p>
<h3>汇总信息显示开关</h3>
<p>l:第一行信息的显示开关。</p>
<div class="cnblogs_code">
<pre>top - <span style="color: rgba(128, 0, 128, 1)">14</span>:<span style="color: rgba(128, 0, 128, 1)">32</span>:<span style="color: rgba(128, 0, 128, 1)">16</span> up<span style="color: rgba(128, 0, 128, 1)">5</span>:<span style="color: rgba(128, 0, 128, 1)">18</span>,<span style="color: rgba(128, 0, 128, 1)">2</span> users,load average: <span style="color: rgba(128, 0, 128, 1)">0.00</span>, <span style="color: rgba(128, 0, 128, 1)">0.01</span>, <span style="color: rgba(128, 0, 128, 1)">0.05</span></pre>
</div>
<p>t:控制任务(即进程)和CPU相关信息的显示开关。一共有四种显示模式,下面是第一种。</p>
<div class="cnblogs_code">
<pre>Tasks: <span style="color: rgba(128, 0, 128, 1)">190</span> total,   <span style="color: rgba(128, 0, 128, 1)">1</span> running, <span style="color: rgba(128, 0, 128, 1)">189</span> sleeping,   <span style="color: rgba(128, 0, 128, 1)">0</span> stopped,   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> zombie
</span>%Cpu(s):<span style="color: rgba(128, 0, 128, 1)">0.0</span> us,<span style="color: rgba(128, 0, 128, 1)">0.0</span> sy,<span style="color: rgba(128, 0, 128, 1)">0.0</span> ni,<span style="color: rgba(128, 0, 128, 1)">100.0</span> <span style="color: rgba(0, 0, 255, 1)">id</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span> wa,<span style="color: rgba(128, 0, 128, 1)">0.0</span> hi,<span style="color: rgba(128, 0, 128, 1)">0.0</span> si,<span style="color: rgba(128, 0, 128, 1)">0.0</span> st</pre>
</div>
<p>第二种和第三种模式都是将CPU资源按照一个使用进度条来显示,一种是条状图形,另一种是块状图形,我个人实验环境,没有什么负载,因此无法看出区别。</p>
<div class="cnblogs_code">
<pre>Tasks: <span style="color: rgba(128, 0, 128, 1)">189</span> total,   <span style="color: rgba(128, 0, 128, 1)">2</span> running, <span style="color: rgba(128, 0, 128, 1)">187</span> sleeping,   <span style="color: rgba(128, 0, 128, 1)">0</span> stopped,   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> zombie
</span>%Cpu(s):   <span style="color: rgba(128, 0, 128, 1)">0.0</span>/<span style="color: rgba(128, 0, 128, 1)">0.0</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>[                                                                                                    ]</pre>
</div>
<div class="cnblogs_code">
<pre>Tasks: <span style="color: rgba(128, 0, 128, 1)">189</span> total,   <span style="color: rgba(128, 0, 128, 1)">2</span> running, <span style="color: rgba(128, 0, 128, 1)">187</span> sleeping,   <span style="color: rgba(128, 0, 128, 1)">0</span> stopped,   <span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)"> zombie
</span>%Cpu(s):   <span style="color: rgba(128, 0, 128, 1)">0.0</span>/<span style="color: rgba(128, 0, 128, 1)">0.5</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>[                                                                                                    ]</pre>
</div>
<p>第四种就是直接关闭显示了。在CentOS 6上,则只有开关显示而已。</p>
<p>m:内存的显示控制,和t命令一样,也有四种模式。因为内存的数据比较丰富,就可以看出条状图形和块状图形的区别了。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190719145634999-1892201262.png" alt=""></p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190719145648976-1101425215.png" alt=""></p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190719145717462-96159641.png" alt=""></p>
<h3>其他命令</h3>
<p>s|d:可用于修改top显示的间隔时间,单位是秒,键入数字后回车即可。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190719150436131-650538430.png" alt=""></p>
<p>k:选择某个PID并选择向其发送的信号。PID为0表示top命令自身,默认的信号是15/SIGTERM。</p>
<p>r:调整某个进程的nice值。</p>
<p>&nbsp;</p>
<h2>uptime</h2>
<p>显示的信息,和top的首行信息一致。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">uptime</span>
<span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">46</span>:<span style="color: rgba(128, 0, 128, 1)">29</span> up<span style="color: rgba(128, 0, 128, 1)">6</span>:<span style="color: rgba(128, 0, 128, 1)">32</span>,<span style="color: rgba(128, 0, 128, 1)">2</span> users,load average: <span style="color: rgba(128, 0, 128, 1)">0.00</span>, <span style="color: rgba(128, 0, 128, 1)">0.01</span>, <span style="color: rgba(128, 0, 128, 1)">0.05</span></pre>
</div>
<p>15:46:29:表示当前的时间。</p>
<p>up&nbsp; &nbsp; 6:32:表示系统已启动的时间。可通过-p选项来使得显示更加直观。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">uptime</span> -<span style="color: rgba(0, 0, 0, 1)">p
up </span><span style="color: rgba(128, 0, 128, 1)">6</span> hours, <span style="color: rgba(128, 0, 128, 1)">32</span> minutes</pre>
</div>
<p>想知道系统的启动时间的话,我们可以自己推算,也可以使用-s选项。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">uptime</span> -<span style="color: rgba(0, 0, 0, 1)">s
</span><span style="color: rgba(128, 0, 128, 1)">2019</span>-<span style="color: rgba(128, 0, 128, 1)">07</span>-<span style="color: rgba(128, 0, 128, 1)">19</span> <span style="color: rgba(128, 0, 128, 1)">09</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>:<span style="color: rgba(128, 0, 128, 1)">51</span></pre>
</div>
<p>2 users:表示当前系统在线用户数。</p>
<p>load average: 0.00, 0.01, 0.05:这个表示系统的平均负载。一共有3个数字。</p>
<ul>
<li>第一个数字:系统在过去1分钟内的平均负载。</li>
<li>第二个数字:系统在过去5分钟内的平均负载。</li>
<li>第三个数字:系统在过去15分钟内的平均负载。</li>
</ul>
<p>平均负载表示的是处于可运行态(runnable)或者不可中断态(uninterruptable)的进程的数量的平均值。可运行态表示的是进程正在使用或者等待使用CPU资源。不可中断态表示的是进程正处于等待IO的情况,例如磁盘IO。</p>
<p>需要注意的是,平均负载并没有针对系统的CPU核心数做专门的设计(man手册叫常规化(normalized))。举个例子,假设平均负载为1,那么在单核的CPU上就表示系统总是忙碌的,在4核的CPU上就表示系统有75%的时间处于空闲状态。</p>
<p>因此判断系统是否繁忙,要将平均负载和CPU核心数结合考量。</p>
<p>&nbsp;</p>
<h2>htop</h2>
<p><span style="color: rgba(255, 0, 0, 1)"><strong>不知是否是由于htop是基于ncurses,它支持类似GUI的鼠标点击,如果鼠标点击在字段名上,还支持排序,反复点击字段名支持升序和降序。</strong></span></p>
<p>htop类似于htop,不过它的输出带有显示着色,并且更易看懂。其他的区别,没实践过,这里基于man手册,在这里也说明下。</p>
<p>htop允许水平和垂直方向的滚动,因此可以看到系统上的所有的进程信息,包含完整的命令行信息。可以以进程树的形式展示进程,可以一次性选择多个进程并在其上执行一些操作。不需要输入PID即可kill或者renice进程。</p>
<p>系统上很可能没htop命令,单独安装下。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> htop</pre>
</div>
<p>界面展示。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201907/1417610-20190730163320875-893898463.png" alt=""></p>
<p>-d --delay=DELAY:指定刷新的间隔,默认是1秒刷新一次。这里的单位要注意,它是十分之一秒,也就是说”-d 1“表示每隔0.1秒刷新一次。</p>
<div class="cnblogs_code">
<pre># htop -d <span style="color: rgba(128, 0, 128, 1)">50</span><span style="color: rgba(0, 0, 0, 1)">
每隔5秒刷新一次。</span></pre>
</div>
<p>-u --user=USERNAME:仅显示指定用户的进程。</p>
<div class="cnblogs_code">
<pre># htop -u postfix</pre>
</div>
<p>-s --sort-key COLUMN:以某个指定的字段排序。可以先查看有哪些字段是支持排序的。</p>
<div class="cnblogs_code">
<pre># htop -<span style="color: rgba(0, 0, 0, 1)">s help
PID
Command
STATE
PPID
...</span></pre>
</div>
<p>排序默认是升序。</p>
<div class="cnblogs_code">
<pre># htop -s PID</pre>
</div>
<p>一些交互式命令。</p>
<p>l:查看选定的进程所打开的文件列表。</p>
<p>s:追踪选定进程的系统调用。</p>
<p>t:以树状图形式显示进程状态。</p>
<p>a:设置进程与CPU核心的绑定。</p>
<p>&nbsp;</p>
<h2>vmstat</h2>
<p>用于报告虚拟内存统计信息。语法如下。</p>
<div class="cnblogs_code">
<pre>vmstat ]</pre>
</div>
<p>不带任何选项和参数的情况下,只显示一次信息。</p>
<div class="cnblogs_code">
<pre># vmstat
procs </span>-----------memory---------- ---swap-- -----io---- -system-- ------cpu-----<span style="color: rgba(0, 0, 0, 1)">
rb   swpd   </span><span style="color: rgba(0, 0, 255, 1)">free</span>   buffcache   si   so    bi    bo   <span style="color: rgba(0, 0, 255, 1)">in</span>   cs us sy <span style="color: rgba(0, 0, 255, 1)">id</span><span style="color: rgba(0, 0, 0, 1)"> wa st
</span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(128, 0, 128, 1)">0</span>      <span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">137488</span>   <span style="color: rgba(128, 0, 128, 1)">2116</span> <span style="color: rgba(128, 0, 128, 1)">400088</span>    <span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">0</span>    <span style="color: rgba(128, 0, 128, 1)">12</span>   <span style="color: rgba(128, 0, 128, 1)">1</span>   <span style="color: rgba(128, 0, 128, 1)">20</span>   <span style="color: rgba(128, 0, 128, 1)">18</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span> <span style="color: rgba(128, 0, 128, 1)">100</span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(128, 0, 128, 1)">0</span></pre>
</div>
<p>delay:每隔几秒显示一次。不支持小数。</p>
<p>count:一共显示几次,如果存在delay但是省略count的话,那么将会一直循环输出。</p>
<p>接下来我们来解释一下每个字段的含义。</p>
<p>Procs</p>
<ul>
<li>r:可运行的进程数,包含了运行中或者等待运行的。</li>
<li>b:处于不可中断睡眠状态的进程数。</li>
</ul>
<p>Memory</p>
<ul>
<li>swpd:虚拟内存的使用数量(这里的虚拟内存,应该就是只swap中的存储吧?)。</li>
<li>free:处于空闲状态的内存数。</li>
<li>buff:作为缓冲(buffer)的内存数。</li>
<li>cache:作为缓存(cache)的内存数。</li>
</ul>
<p>Swap</p>
<ul>
<li>si:从磁盘交换入的内存速率,单位是每秒。</li>
<li>so:交换至磁盘的内存速率。</li>
</ul>
<p>IO</p>
<ul>
<li>bi:从块设备上接收到的块数(blocks/s)。</li>
<li>bo:发送至块设备上的块数(blocks/s)。</li>
</ul>
<p>System</p>
<ul>
<li>in:每秒中断数,包含时钟(clock)。</li>
<li>cs:每秒发生的上下文切换数。</li>
</ul>
<p>CPU</p>
<p>这里记录的是占CPU时间的百分比。</p>
<ul>
<li>us:运行非内核级代码的时间。(用户时间,包含nice时间)</li>
<li>sy:运行内核级代码的时间。(系统时间)</li>
<li>id:处于空闲状态的时间。</li>
<li>wa:等待IO的时间。</li>
<li>st:被虚拟机所偷走(stolen)的时间。</li>
</ul>
<p>&nbsp;</p>
<h2>pmap</h2>
<p>根据PID查看进程的内存映射情况。</p>
<div class="cnblogs_code">
<pre>pmap pid [...]</pre>
</div>
<p>&nbsp;</p>
<p>-x:查看扩展格式,即更详细的信息。</p>
<div class="cnblogs_code">
<pre># pmap <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">
# pmap </span>-x <span style="color: rgba(128, 0, 128, 1)">1</span></pre>
</div>
<p>&nbsp;</p>
<p>也可以直接查看/proc目录下的文件。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span> /proc/PID/<span style="color: rgba(0, 0, 0, 1)">maps
# </span><span style="color: rgba(0, 0, 255, 1)">cat</span> /proc/<span style="color: rgba(128, 0, 128, 1)">1</span>/maps</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2>glances</h2>
<p>是一款类似top和htop的综合监控工具。跨平台,使用python语言编写。</p>
<p>最早出现的是top,htop试图取代top,而glances则试图取代前两者。</p>
<p>官网是:https://nicolargo.github.io/glances/</p>
<p>从站点的介绍来看,glances是一款更接近现代的监控系统,社区和文档都不错,将来可着重学习。</p>
<p>它除了可以像top/htop那样独立运行以外,还支持C/S模式和web模式,并且数据可以到处成csv格式等多种格式,也可以输出到其他的监控平台如Prometheus等。</p>
<p>&nbsp;</p>
<h2>dstat</h2>
<p>dstat是一个多功能的工具,它用于取代vmstat、iostat、ifstat和netstat工具。看man手册的话,有说明该工具比上述其他工具更好,例如克服了上述工具已知的一些缺点以及添加了一些额外的功能。</p>
<p>也是需要单独安装的一个命令。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">yum</span> <span style="color: rgba(0, 0, 255, 1)">install</span> dstat</pre>
</div>
<p>语法。</p>
<div class="cnblogs_code">
<pre>dstat [-afv] ]</pre>
</div>
<p>不带选项和参数的dstat的输出结果,默认是delay为1秒,count省略无限制,直到用户Ctrl+c退出。</p>
<p>输出结果有一个很明显的特点,也是htop相对于top的特点,那就是着色。并且它还自带了单位转换。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190801174504381-1973082159.png" alt=""></p>
<p>由于我们没有指定任何的选项,因此命令默认帮我们指定了-cdngy这5个选项。</p>
<div class="cnblogs_code">
<pre>You did not <span style="color: rgba(0, 0, 255, 1)">select</span> any stats, using -cdngy by default.</pre>
</div>
<p>-c, --cpu:启用CPU统计。</p>
<p>-d, --disk:启用磁盘统计。</p>
<p>-n, --net:启用网络统计。</p>
<p>-g, --page:启用页面统计。</p>
<p>-y, --sys:启用系统统计。</p>
<p>在语法中,还特意将[-afv]列出来了,我们来单独看这3个选项的作用。</p>
<p>-a, --all:等同于-cdngy,也就是默认的选项。</p>
<p>-f, --full:扩展-C、-D、-I、-N和-S发现列表。我们先来单独看这几个大写的选项的含义。</p>
<ul>
<li>-C 0,3,total:当使用-c选项时,包含cpu0、cpu3和total。</li>
<li>-D total,hda:当使用-d选项时,包含total和hda。</li>
<li>-I 5,10:当使用-i选项时,包含中断5和10。
<ul>
<li>-i, --int:启用中断统计。</li>
</ul>
</li>
<li>-N eth1,total:当使用-n选项时,包含eth1和total。</li>
<li>-S swap1,total:当使用-s选项时,包含swap1和total。
<ul>
<li>-s, --swap:启用swap统计。</li>
</ul>
</li>
</ul>
<p>默认情况下,我们对于CPU、磁盘和网卡等资源的监控,都是只显示total信息的。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190801180126774-939550443.png" alt=""></p>
<p>假如我们在监控CPU信息时(-c),又使用-C选项,就可以实现对具体的某个或者某些CPU核心进行监控。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190801180331855-900942057.png" alt=""></p>
<p>当然了,这些大写的选项后面是需要加具体的参数的,否则报错。</p>
<div class="cnblogs_code">
<pre># dstat -c -<span style="color: rgba(0, 0, 0, 1)">C
dstat: option </span>-C requires argument, try dstat -h <span style="color: rgba(0, 0, 255, 1)">for</span> a list of all the options</pre>
</div>
<p>而-f选项,则是直接将上述提到的那些指定某些实例(如CPU核心、网卡、硬盘等)的选项都带上,并且选项参数都默认扩展为系统上已发现的CPU核心、网卡和硬盘等。</p>
<p>简而言之,-af可以将原本统计total的信息转变为针对具体实例的统计。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190801180733822-80680926.png" alt=""></p>
<p>-v, --vmstat:等同于“-pmgdsc -D total”。该选项的统计信息,应该是模仿vmstat的输出。</p>
<p>-p, --proc:启用进程统计。</p>
<p>-m, --mem:启用内存统计。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805142323625-1105853577.png" alt=""></p>
<p>--tcp:启用TCP连接相关的统计(listen, established, syn, time_wait, close)。</p>
<p>--udp:启用TCP连接相关的统计(listen, active)。</p>
<p>--raw:启用裸套接字相关的统计(raw sockets)。</p>
<p>--socket:启用套接字相关的统计(total, tcp, udp, raw, ip-fragments)。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805142844413-1509687634.png" alt=""></p>
<p>--ipc:启用IPC(进程间通信)相关的统计(message queue, semaphores, shared memory)。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805142944289-1798302804.png" alt=""></p>
<p>&nbsp;--output file:以CSV格式写入到外部文件中。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805144402321-1949145936.png" alt=""></p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">cat</span><span style="color: rgba(0, 0, 0, 1)"> dstat_along.csv
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Dstat 0.7.2 CSV output</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Author:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Dag Wieers &lt;dag@wieers.com&gt;</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">URL:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://dag.wieers.com/home-made/dstat/</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Host:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">C7</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">User:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">root</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Cmdline:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dstat --output dstat_along.csv 1 2</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">Date:</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">05 Aug 2019 14:43:30 CST</span><span style="color: rgba(128, 0, 0, 1)">"</span>

<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">total cpu usage</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,,,,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">dsk/total</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">net/total</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">paging</span><span style="color: rgba(128, 0, 0, 1)">"</span>,,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">system</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">usr</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">sys</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">idl</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">wai</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">hiq</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">siq</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">read</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">writ</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">recv</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">send</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">in</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">out</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">int</span><span style="color: rgba(128, 0, 0, 1)">"</span>,<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">csw</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(128, 0, 128, 1)">0.020</span>,<span style="color: rgba(128, 0, 128, 1)">0.066</span>,<span style="color: rgba(128, 0, 128, 1)">99.907</span>,<span style="color: rgba(128, 0, 128, 1)">0.006</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.001</span>,<span style="color: rgba(128, 0, 128, 1)">19724.801</span>,<span style="color: rgba(128, 0, 128, 1)">2191.394</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">72.748</span>,<span style="color: rgba(128, 0, 128, 1)">64.299</span>
<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">100.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">106.0</span>,<span style="color: rgba(128, 0, 128, 1)">902.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">72.0</span>,<span style="color: rgba(128, 0, 128, 1)">55.0</span>
<span style="color: rgba(128, 0, 128, 1)">0.249</span>,<span style="color: rgba(128, 0, 128, 1)">0.249</span>,<span style="color: rgba(128, 0, 128, 1)">99.501</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">60.0</span>,<span style="color: rgba(128, 0, 128, 1)">362.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">0.0</span>,<span style="color: rgba(128, 0, 128, 1)">92.0</span>,<span style="color: rgba(128, 0, 128, 1)">71.0</span></pre>
</div>
<p>--noupdate:当delay大于1的时候,例如3,并不是每隔3秒才会显示一次,在3秒内的每隔一秒,都会显示一次中间状态值,就是下图中红色没加粗的字体。使用该选项的话,会禁用这种机制。</p>
<p>这个中间状态值是在这段时间内的平均值,而不是快照值。例如delay等于10,那么前9次的值,分别是前1秒的平均值、前2秒的平均值。。。前9秒的平均值。最后的值,是前10秒的平均值。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805155805436-1689070783.png" alt=""></p>
<p>dstat中可包含插件用于扩展其功能,插件有内部和外部之分,用户可自行开发插件或者参与到插件的开发(contribute,贡献)。</p>
<p>内部插件应该是dstat自带的。外部插件才是用户开发的。</p>
<p>--list:列出内部和外部插件。</p>
<div class="cnblogs_code">
<pre># dstat --<span style="color: rgba(0, 0, 0, 1)">list
internal:
    aio, cpu, cpu24, disk, disk24, disk24old, epoch, fs, </span><span style="color: rgba(0, 0, 255, 1)">int</span>, int24, io, ipc, load, lock, mem, net, page, page24, proc, raw, socket, swap, swapold, sys, tcp, <span style="color: rgba(0, 0, 255, 1)">time</span><span style="color: rgba(0, 0, 0, 1)">, udp, unix, vm
</span>/usr/share/<span style="color: rgba(0, 0, 0, 1)">dstat:
    battery, battery</span>-remain, cpufreq, dbus, disk-tps, disk-util, dstat, dstat-cpu, dstat-ctxt, dstat-mem, fan, freespace, gpfs, gpfs-ops, helloworld, innodb-buffer, innodb-<span style="color: rgba(0, 0, 0, 1)">io,
    innodb</span>-ops, lustre, memcache-hits, mysql-io, mysql-keys, mysql5-cmds, mysql5-conn, mysql5-io, mysql5-keys, net-packets, nfs3, nfs3-ops, nfsd3, nfsd3-<span style="color: rgba(0, 0, 0, 1)">ops, ntp, postfix, power,
    proc</span>-count, qmail, rpc, rpcd, sendmail, snooze, squid, test, thermal, top-bio, top-bio-adv, top-childwait, top-cpu, top-cpu-adv, top-cputime, top-cputime-avg, top-<span style="color: rgba(0, 0, 255, 1)">int</span>, top-<span style="color: rgba(0, 0, 0, 1)">io,
    top</span>-io-adv, top-latency, top-latency-avg, top-mem, top-oom, utmp, vm-memctl, vmk-hba, vmk-<span style="color: rgba(0, 0, 255, 1)">int</span>, vmk-nic, vz-cpu, vz-io, vz-ubc, wifi</pre>
</div>
<p>--plugin-name:基于插件的名称来启用外部插件。这里的“--plugin-name”是需要替换成具体的插件名称的。这些在man手册的PLUGINS中可查看具体的每个插件名称。</p>
<p>例如--dbus和--dstat。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805145450999-1206745885.png" alt=""></p>
<p>而有一些插件,则是需要其他条件的支持才可使用的。</p>
<div class="cnblogs_code">
<pre># dstat --battery <span style="color: rgba(128, 0, 128, 1)">1</span> <span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">
Module dstat_battery failed to load. (No ACPI battery information found.)
None of the stats you selected are available.</span></pre>
</div>
<p>dstat支持一些top系列的插件,用于显示最占用某些资源的进程。</p>
<p>--top-cpu:显示最占用CPU的进程。</p>
<p>--top-mem:显示最占用内存的进程。</p>
<p>--top-oom:显示当内存不足时,显示最容易被OOM机制所kill掉的进程,这个在内存不足时还是蛮有用的。</p>
<p>--top-io:显示最占用IO的进程。</p>
<p>--top-latency:显示延迟最高的进程,单位毫秒。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805153421607-1165404068.png" alt=""></p>
<p>-t, --time:在输出的时候,加上当前的日期和时间信息,某些情况下可能有用。该选项一般放最前。</p>
<p><img src="https://img2018.cnblogs.com/blog/1417610/201908/1417610-20190805163720256-947727571.png" alt=""></p>
<p>&nbsp;</p>
<h2>kill和killall</h2>
<p>进程间通信,包含了信号(signal)机制。而kill命令,则用于向进程发送信号。</p>
<p>不过需要注意的是,kill命令,有2个,一个是bash内置命令,另一个是外部命令。</p>
<p>当我们直接键入kill命令的时候,就是使用内置命令。</p>
<p>可通过type命令来判断。</p>
<div class="cnblogs_code">
<pre># type <span style="color: rgba(0, 0, 255, 1)">kill</span>
<span style="color: rgba(0, 0, 255, 1)">kill</span> is a shell builtin</pre>
</div>
<p>想使用外部的kill命令的话,可通过which来判断其绝对路径,然后键入绝对路径来执行。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">which</span> <span style="color: rgba(0, 0, 255, 1)">kill</span>
/usr/bin/<span style="color: rgba(0, 0, 255, 1)">kill</span></pre>
</div>
<p>查看内置命令用法使用help命令,查看外部命令用法使用man命令。</p>
<div class="cnblogs_code">
<pre># help <span style="color: rgba(0, 0, 255, 1)">kill</span><span style="color: rgba(0, 0, 0, 1)">
# </span><span style="color: rgba(0, 0, 255, 1)">man</span> <span style="color: rgba(0, 0, 255, 1)">kill</span></pre>
</div>
<p>查看完帮助后,发现外部kill命令有--help选项,而内置的kill命令是没有的,因此可使用该选项来判断你所使用的到底是内置还是外部。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">kill</span> --<span style="color: rgba(0, 0, 0, 1)">help
</span>-bash: <span style="color: rgba(0, 0, 255, 1)">kill</span>: -<span style="color: rgba(0, 0, 0, 1)">help: invalid signal specification
# /usr/bin/<span style="color: rgba(0, 0, 255, 1)">kill</span> --<span style="color: rgba(0, 0, 0, 1)">help
... ...</span></pre>
</div>
<p>本文所阐述的是内置的kill命令。</p>
<p>kill命令会成为shell内置命令有两点原因。</p>
<ol>
<li>它允许了作业(job)ID可以被使用,而不仅仅是PID。</li>
<li>它允许用户在系统进程数已达到最大值的时候依然可以kill进程。注:若使用的是外部命令,则必须再发起一个新进程,而此时由于达到了进程上限,因此无法再发起新进程也就无法再使用外部命令了。而内置命令存在于当前shell进程中,无需再创建新进程。</li>
</ol>
<p>-l:列出所有的信号。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">kill</span> -<span style="color: rgba(0, 0, 0, 1)">l
</span><span style="color: rgba(128, 0, 128, 1)">1</span>) SIGHUP   <span style="color: rgba(128, 0, 128, 1)">2</span>) SIGINT   <span style="color: rgba(128, 0, 128, 1)">3</span>) SIGQUIT   <span style="color: rgba(128, 0, 128, 1)">4</span>) SIGILL   <span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">) SIGTRAP
</span><span style="color: rgba(128, 0, 128, 1)">6</span>) SIGABRT   <span style="color: rgba(128, 0, 128, 1)">7</span>) SIGBUS   <span style="color: rgba(128, 0, 128, 1)">8</span>) SIGFPE   <span style="color: rgba(128, 0, 128, 1)">9</span>) SIGKILL    <span style="color: rgba(128, 0, 128, 1)">10</span><span style="color: rgba(0, 0, 0, 1)">) SIGUSR1
</span><span style="color: rgba(128, 0, 128, 1)">11</span>) SIGSEGV    <span style="color: rgba(128, 0, 128, 1)">12</span>) SIGUSR2    <span style="color: rgba(128, 0, 128, 1)">13</span>) SIGPIPE    <span style="color: rgba(128, 0, 128, 1)">14</span>) SIGALRM    <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)">) SIGTERM
</span><span style="color: rgba(128, 0, 128, 1)">16</span>) SIGSTKFLT    <span style="color: rgba(128, 0, 128, 1)">17</span>) SIGCHLD    <span style="color: rgba(128, 0, 128, 1)">18</span>) SIGCONT    <span style="color: rgba(128, 0, 128, 1)">19</span>) SIGSTOP    <span style="color: rgba(128, 0, 128, 1)">20</span><span style="color: rgba(0, 0, 0, 1)">) SIGTSTP
</span><span style="color: rgba(128, 0, 128, 1)">21</span>) SIGTTIN    <span style="color: rgba(128, 0, 128, 1)">22</span>) SIGTTOU    <span style="color: rgba(128, 0, 128, 1)">23</span>) SIGURG    <span style="color: rgba(128, 0, 128, 1)">24</span>) SIGXCPU    <span style="color: rgba(128, 0, 128, 1)">25</span><span style="color: rgba(0, 0, 0, 1)">) SIGXFSZ
</span><span style="color: rgba(128, 0, 128, 1)">26</span>) SIGVTALRM    <span style="color: rgba(128, 0, 128, 1)">27</span>) SIGPROF    <span style="color: rgba(128, 0, 128, 1)">28</span>) SIGWINCH    <span style="color: rgba(128, 0, 128, 1)">29</span>) SIGIO    <span style="color: rgba(128, 0, 128, 1)">30</span><span style="color: rgba(0, 0, 0, 1)">) SIGPWR
</span><span style="color: rgba(128, 0, 128, 1)">31</span>) SIGSYS    <span style="color: rgba(128, 0, 128, 1)">34</span>) SIGRTMIN    <span style="color: rgba(128, 0, 128, 1)">35</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">1</span>    <span style="color: rgba(128, 0, 128, 1)">36</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">2</span>    <span style="color: rgba(128, 0, 128, 1)">37</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">3</span>
<span style="color: rgba(128, 0, 128, 1)">38</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">4</span>    <span style="color: rgba(128, 0, 128, 1)">39</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">5</span>    <span style="color: rgba(128, 0, 128, 1)">40</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">6</span>    <span style="color: rgba(128, 0, 128, 1)">41</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">7</span>    <span style="color: rgba(128, 0, 128, 1)">42</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">8</span>
<span style="color: rgba(128, 0, 128, 1)">43</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">9</span>    <span style="color: rgba(128, 0, 128, 1)">44</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">10</span>    <span style="color: rgba(128, 0, 128, 1)">45</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">11</span>    <span style="color: rgba(128, 0, 128, 1)">46</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">12</span>    <span style="color: rgba(128, 0, 128, 1)">47</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">13</span>
<span style="color: rgba(128, 0, 128, 1)">48</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">14</span>    <span style="color: rgba(128, 0, 128, 1)">49</span>) SIGRTMIN+<span style="color: rgba(128, 0, 128, 1)">15</span>    <span style="color: rgba(128, 0, 128, 1)">50</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">14</span>    <span style="color: rgba(128, 0, 128, 1)">51</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">13</span>    <span style="color: rgba(128, 0, 128, 1)">52</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">12</span>
<span style="color: rgba(128, 0, 128, 1)">53</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">11</span>    <span style="color: rgba(128, 0, 128, 1)">54</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">10</span>    <span style="color: rgba(128, 0, 128, 1)">55</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">9</span>    <span style="color: rgba(128, 0, 128, 1)">56</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">8</span>    <span style="color: rgba(128, 0, 128, 1)">57</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">7</span>
<span style="color: rgba(128, 0, 128, 1)">58</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">6</span>    <span style="color: rgba(128, 0, 128, 1)">59</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">5</span>    <span style="color: rgba(128, 0, 128, 1)">60</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">4</span>    <span style="color: rgba(128, 0, 128, 1)">61</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">3</span>    <span style="color: rgba(128, 0, 128, 1)">62</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">2</span>
<span style="color: rgba(128, 0, 128, 1)">63</span>) SIGRTMAX-<span style="color: rgba(128, 0, 128, 1)">1</span>    <span style="color: rgba(128, 0, 128, 1)">64</span>) SIGRTMAX</pre>
</div>
<p>信号的表示方法有三种。</p>
<ul>
<li>数字,例如1。</li>
<li>完整名称,例如SIGHUP。</li>
<li>简写名称,例如HUP。</li>
</ul>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">kill</span> -s <span style="color: rgba(128, 0, 128, 1)">15</span><span style="color: rgba(0, 0, 0, 1)"> PID
# </span><span style="color: rgba(0, 0, 255, 1)">kill</span> -<span style="color: rgba(0, 0, 0, 1)">s SIGTERM PID
# </span><span style="color: rgba(0, 0, 255, 1)">kill</span> -s TERM PID</pre>
</div>
<p>常用的信号:</p>
<ul>
<li>1(SIGHUP):在不停止进程的情况下使其重载配置文件;一般的服务的reload函数就是调用此命令;</li>
<li>2(SIGINT):interrupt,打断正在运行的进程,等同于在终端键入Ctrl + c;</li>
<li>9(SIGKILL):直接杀死正在运行的进程;</li>
<li>15(SIGTERM):终止运行中的进程;一般的服务的stop函数就是调用此命令(个人见解);这是默认的信号;</li>
<li>18(SIGCONT):继续被停止的进程;</li>
<li>19(SIGSTOP):停止进程,等同于在进程运行时键入Ctrl + z或者命令执行的时候加入后台符号&amp;;</li>
</ul>
<p>kill基于PID来向进程发送信号,而killall则可以根据进程名来发送信号。和kill类似,其默认的信号是SIGTERM,-s选项用于指定信号。</p>
<p>其作用应该是和pkill一样的,不过默认情况下pkill的进程名是模糊匹配,而killall则必须完全匹配进程名。</p>
<div class="cnblogs_code">
<pre># <span style="color: rgba(0, 0, 255, 1)">ps</span> axu | <span style="color: rgba(0, 0, 255, 1)">grep</span> -E <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">redis|httpd</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
redis      </span><span style="color: rgba(128, 0, 128, 1)">2996</span><span style="color: rgba(128, 0, 128, 1)">0.1</span><span style="color: rgba(128, 0, 128, 1)">0.5</span> <span style="color: rgba(128, 0, 128, 1)">142956</span><span style="color: rgba(128, 0, 128, 1)">5796</span> ?      Ssl<span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">11</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/bin/redis-server <span style="color: rgba(128, 0, 128, 1)">127.0</span>.<span style="color: rgba(128, 0, 128, 1)">0.1</span>:<span style="color: rgba(128, 0, 128, 1)">6379</span><span style="color: rgba(0, 0, 0, 1)">
root       </span><span style="color: rgba(128, 0, 128, 1)">3028</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.5</span> <span style="color: rgba(128, 0, 128, 1)">230376</span><span style="color: rgba(128, 0, 128, 1)">5164</span> ?      Ss   <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">12</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
apache   </span><span style="color: rgba(128, 0, 128, 1)">3045</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">232460</span><span style="color: rgba(128, 0, 128, 1)">3148</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
apache   </span><span style="color: rgba(128, 0, 128, 1)">3046</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">232460</span><span style="color: rgba(128, 0, 128, 1)">3148</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
apache   </span><span style="color: rgba(128, 0, 128, 1)">3047</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">232460</span><span style="color: rgba(128, 0, 128, 1)">3148</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
apache   </span><span style="color: rgba(128, 0, 128, 1)">3048</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">232460</span><span style="color: rgba(128, 0, 128, 1)">3148</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
apache   </span><span style="color: rgba(128, 0, 128, 1)">3050</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.3</span> <span style="color: rgba(128, 0, 128, 1)">232460</span><span style="color: rgba(128, 0, 128, 1)">3148</span> ?      S    <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">13</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> /usr/sbin/httpd -<span style="color: rgba(0, 0, 0, 1)">DFOREGROUND
root       </span><span style="color: rgba(128, 0, 128, 1)">3113</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span> <span style="color: rgba(128, 0, 128, 1)">112708</span>   <span style="color: rgba(128, 0, 128, 1)">988</span> pts/<span style="color: rgba(128, 0, 128, 1)">1</span>    S+   <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">17</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">grep</span> --color=auto -E redis|<span style="color: rgba(0, 0, 0, 1)">httpd
# <span style="color: rgba(0, 0, 255, 1)">killall</span><span style="color: rgba(0, 0, 0, 1)"> http
http: no process found
# <span style="color: rgba(0, 0, 255, 1)">killall</span><span style="color: rgba(0, 0, 0, 1)"> httpd
# <span style="color: rgba(0, 0, 255, 1)">killall</span><span style="color: rgba(0, 0, 0, 1)"> redis
redis: no process found
# <span style="color: rgba(0, 0, 255, 1)">killall</span> redis-<span style="color: rgba(0, 0, 0, 1)">server
# <span style="color: rgba(0, 0, 255, 1)">ps</span> axu | <span style="color: rgba(0, 0, 255, 1)">grep</span> -E <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">redis|httpd</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
root       </span><span style="color: rgba(128, 0, 128, 1)">3149</span><span style="color: rgba(128, 0, 128, 1)">0.0</span><span style="color: rgba(128, 0, 128, 1)">0.0</span> <span style="color: rgba(128, 0, 128, 1)">112708</span>   <span style="color: rgba(128, 0, 128, 1)">988</span> pts/<span style="color: rgba(128, 0, 128, 1)">1</span>    S+   <span style="color: rgba(128, 0, 128, 1)">15</span>:<span style="color: rgba(128, 0, 128, 1)">18</span>   <span style="color: rgba(128, 0, 128, 1)">0</span>:<span style="color: rgba(128, 0, 128, 1)">00</span> <span style="color: rgba(0, 0, 255, 1)">grep</span> --color=auto -E redis|httpd</pre>
</div>
<p>想要改变killall的匹配进程名的规则,例如启用RE;或者想根据安全上下文(涉及selinux)、用户名来向进程发送信号。这些,killall都是支持的,详见man手册中的选项说明。</p>
<p>&nbsp;</p>
<h1>结语</h1>
<p>还有许许多多和进程相关的其他命令。</p>
<ul>
<li>进程作业(job)系统:jobs、bg、fg。</li>
<li>进程优先级:nice、renice。</li>
</ul>
<p>该篇篇幅太长了,就不展开了。另外,也感慨虽然这篇随笔的篇幅很长,但是大多是比较凌乱的知识点,并且个人对其准确性也不敢完全保证。</p>
<p>并且深度也不够,惭愧惭愧,权当笔记了。</p><br><br>
来源:https://www.cnblogs.com/alongdidi/p/linux_process.html
頁: [1]
查看完整版本: CentOS 7上的进程管理