监控系统资源

一、uptimew

Linux 命令,显示系统已经执行了多长时间,它依次显示下列信息:当前时间、系统已经执行了多长时间、眼下有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

uptime 命令能够用来查看server已经执行了多久,当前登录的用户有多少,以及server在过去的1分钟、5分钟、15分钟的系统平均负载值。

平均负载的最佳值是1,这意味着每一个进程都能够马上运行不会错过CPU周期。负载的正常值在不同的系统中有着非常大的区别。在单处理器的工作站中,12都是能够接受的。然而在多处理器的server上你可能看到810

你能使用uptime来确定是server还是网络出了问题。比如假设网络应用程序执行,执行uptime来了解系统负载是否非常高。假设负载不高,这个问题非常有可能是因为网络引起的而非server。

提示:你能够使用 命令来取代 uptime也提供关于当前系统登录用户和用户所进行工作的相关信息。

以下是一个在Linux系统上执行uptimew命令的演示样例:

[root@instructor Desktop]# uptime

 17:12:53 up  6:22,  3 users,  load average: 0.00, 0.00, 0.00

这里须要注意的是load average这个输出值,这三个值的大小一般不能大于系统逻辑CPU的个数,比如,本输出中系统有4个逻辑CPU,假设load average的三个值长期大于4时,说明CPU非常繁忙,负载非常高,可能会影响系统性能,可是偶尔大于4时,倒不用操心,一般不会影响系统性能。相反,假设load average的输出值小于CPU的个数,则表示CPU还有空暇,比方本例中的输出,CPU是比較空暇的。

[root@instructor Desktop]# w

 17:14:25 up  6:23,  3 users,  load average: 0.00, 0.00, 0.00

USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT

root     tty1     :0               Tue23    2days 56.54s 56.54s /usr/bin/Xorg :

root     pts/0    :0.0             Tue23    2days  0.55s  0.55s /bin/bash

root     pts/2    :0.0             16:08    1.00s  0.45s  0.41s w

二、Pspstree

1、Ps:将某个时间点的程序执行情况撷取下来

[root@instructor Desktop]# ps aux  <==观察系统全部的程序数据

[root@instructor Desktop]# ps -lA  <==也是可以观察全部系统的数据

[root@instructor Desktop]# ps axjf <==连同部分程序树状态

选项与參数:

-A  :全部的 process 均显示出来,与 -e 具有相同的效用;

-a  :不与 terminal 有关的全部 process 

-u  :有效使用者 (effective user) 相关的 process 

-x  :通常与 这个參数一起使用,可列出较完整资讯。

-f  :显示父子进程

-o  :依据进程属性查看

输出格式规划:

l   :较长、较具体的将该 PID 的的资讯列出;

j   :工作的格式 (jobs format)

-f  :做一个更为完整的输出。

范例一:将眼下属于自己这次登陆的 PID 与相关资讯列出来(仅仅与自己的 bash 有关)

[root@instructor Desktop]# ps -l

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

4 S     0 13639 13637  0  75   0 -  1287 wait   pts/1    00:00:00 bash

4 R     0 13700 13639  0  77   0 -  1101 -      pts/1    00:00:00 ps

系统总体的程序执行是许多的,但假设使用 ps -l 则仅列出与你的操作环境 (bash) 有关的程序而已, 亦即最上一级的父程序会是你自己的 bash 而没有延伸到 init 这支程序去!那么 ps -l 列出的数据有哪些呢:

F:代表这个程序旗标 (process flags),说明这个程序的总结权限,常见号码有:

若为 表示此程序的权限为 root ; 

若为 则表示此子程序仅进行复制(fork)而没有实际执行(exec)。 

S:代表这个程序的状态 (STAT),基本的状态有:

R (Running):该程序正在执行中; 

S (Sleep):该程序眼下正在睡眠状态(idle),但能够被唤醒(signal)。 

:不可被唤醒的睡眠状态,通常这支程序可能在等待 I/O 的情况(ex>列印

:停止状态(stop),可能是在工作控制(背景暂停)或除错 (traced) 状态; 

Z (Zombie):僵尸状态,程序已经终止但却无法被移除至内存外。 

s(sister):子进程

<:高优先级

n:低优先级

+:后天进程

:锁定进程

UID/PID/PPID:代表此程序被该 UID 所拥有/程序的 PID 号码/此程序的父程序 PID 号码

C:代表 CPU 使用率,单位为百分比;

PRI/NIPriority/Nice 的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该程序越快被 CPU 执行。

ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel function,指出该程序在内存的哪个部分,假设是个 running 的程序,一般就会显示『 』 / SZ 代表此程序用掉多少内存 / WCHAN 表示眼下程序是否执行中,相同的, 若为 表示正在执行中。

TTY:登陆者的终端机位置,若为远程登陆则使用动态终端介面 (pts/n)

TIME:使用掉的 CPU 时间,注意,是此程序实际花费 CPU 执行的时间,而不是系统时间;

CMD:就是 command 的缩写,造成此程序的触发程序之命令为何。 

范例二:列出眼下全部的正在内存其中的程序:

[root@instructor Desktop]# ps aux

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root         1  0.0  0.0   2064   616 ?        Ss   Mar11   0:01 init [5]

root         2  0.0  0.0      0     0 ?        S<   Mar11   0:00 [migration/0]

root         3  0.0  0.0      0     0 ?        SN   Mar11   0:00 [ksoftirqd/0]

.....(中间省略).....

root     13639  0.0  0.2   5148  1508 pts/1    Ss   11:44   0:00 -bash

root     14232  0.0  0.1   4452   876 pts/1    R+   15:52   0:00 ps aux

root     18593  0.0  0.0   2240   476 ?        Ss   Mar14   0:00 /usr/sbin/atd

你会发现 ps -l 与 ps aux 显示的项目并不同样!在 ps aux 显示的项目中,各栏位的意义为:

USER:该 process 属於那个使用者帐号的? 

PID :该 process 的程序识别码。 

%CPU:该 process 使用掉的 CPU 资源百分比; 

%MEM:该 process 所占用的实体内存百分比; 

VSZ :该 process 使用掉的虚拟内存量 (Kbytes) 

RSS :该 process 占用的固定的内存量 (Kbytes) 

TTY :该 process 是在那个终端机上面执行,若与终端机无关则显示 ?,另外, tty1-tty6 是本机上面的登陆者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 

STAT:该程序眼下的状态,状态显示与 ps -l 的 旗标同样 (R/S/T/Z) 

START:该 process 被触发启动的时间; 

TIME :该 process 实际使用 CPU 执行的时间。 

COMMAND:该程序的实际命令为何? 

一般来说,ps aux 会按照 PID 的顺序来排序显示,我们还是以 13639 那个 PID 那行来说明!该行的意义为:root 执行的 bash PID 为 13639,占用了 0.2% 的内存容量百分比,状态为休眠 (S),该程序启动的时间为 11:44 , 且取得的终端机环境为 pts/1 。与 ps aux 看到的事实上是同一个程序!

范例三:以范例一的显示内容,显示出全部的程序:

[root@instructor Desktop]# ps -lA

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD

4 S     0     1     0  0  76   0 -   435 -      ?        00:00:01 init

1 S     0     2     1  0  94  19 -     0 ksofti ?        00:00:00 ksoftirqd/0

1 S     0     3     1  0  70  -5 -     0 worker ?        00:00:00 events/0

....(下面省略)....

你会发现每一个栏位与 ps -l 的输出情况同样,但显示的程序则包含系统全部的程序。

范例四:列出类似程序树的程序显示:

[root@instructor Desktop]# ps axjf

 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND

    0     1     1     1 ?           -1 Ss       0   0:01 init [5]

.....(中间省略).....

    1  4586  4586  4586 ?           -1 Ss       0   0:00 /usr/sbin/sshd

 4586 13637 13637 13637 ?           -1 Ss       0   0:00  \_ sshd: root@pts/1

13637 13639 13639 13639 pts/1    14266 Ss       0   0:00      \_ -bash

13639 14266 14266 13639 pts/1    14266 R+       0   0:00          \_ ps axjf

.....(后面省略).....

范例五:找出与 cron 与 syslog 这两个服务有关的 PID 号码?

[root@instructor Desktop]# ps aux | egrep '(cron|syslog)'

root   4286  0.0  0.0  1720   572 ?      Ss  Mar11   0:00 syslogd -m 0

root   4661  0.0  0.1  5500  1192 ?      Ss  Mar11   0:00 crond

root  14286  0.0  0.0  4116   592 pts/1  R+  16:15   0:00 egrep (cron|syslog)

所以号码是 4286 及 4661 这两个罗!就是这样找的啦!

除此之外,我们必需要知道的是僵尸(zombie)程序是什么? 通常,造成僵尸程序的成因是由于该程序应该已经执行完成,或者是因故应该要终止了, 可是该程序的父程序却无法完整的将该程序结束掉,而造成那个程序一直存在内存其中。 假设你发如今某个程序的 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序,比如:

apache  8683  0.0  0.9 83384 9992 ?   Z  14:33   0:00 /usr/sbin/httpd <defunct>

当系统不稳定的时候就easy造成所谓的僵尸程序,可能是由于程序写的不好,或者是使用者的操作习惯不良等等所造成。 假设你发现系统中非常多僵尸程序时,要找出该程序的父程序,然后做个追踪,进行主机的环境最佳化!看看有什么地方须要改善的,不要仅仅是直接将他 kill 掉而已呢!不然的话,可能他会一直产生,不能杜绝此类情况!

其实,通常僵尸程序都已经无法控管,而直接是交给 init 这支程序来负责了,偏偏 init 是系统第一支执行的程序, 他是全部程序的父程序!我们无法杀掉该程序的 ,所以,假设产生僵尸程序, 而系统过一阵子还没有办法透过核心非常常性的特殊处理来将该程序删除时,那你仅仅好透过 reboot 的方式来将该程序抹去了!

2、Pstree动态观察程序的变化

[root@instructor Desktop]# pstree [-A|U] [-up]

选项与參数:

-A  :各程序树之间的连接以 ASCII 字节来连接;

-U  :各程序树之间的连接以万国码的字节来连接。在某些终端介面下可能会有错误;

-p  :并同一时候列出每一个 process 的 PID

-u  :并同一时候列出每一个 process 的所属帐号名称。

范例一:列出眼下系统上面全部的程序树的相关性:

[root@instructor Desktop]# pstree -A

init-+-acpid

     |-atd

     |-auditd-+-audispd---{audispd}  <==这行与底下一行为 auditd 分出来的子程序

     |        `-{auditd}

     |-automount---4*[{automount}]   <==默认情况下,相似的程序会以数字显示

....(中间省略)....

     |-sshd---sshd---bash---pstree   <==就是我们命令执行的那个相依性!

....(底下省略)....

范例二:承上题,同一时候列出 PID 与 users 

[root@instructor Desktop]# pstree -Aup

init(1)-+-acpid(4555)

        |-atd(18593)

        |-auditd(4256)-+-audispd(4258)---{audispd}(4261)

        |              `-{auditd}(4257)

        |-automount(4536)-+-{automount}(4537) <==程序相似但 PID 不同!

        |                 |-{automount}(4538)

        |                 |-{automount}(4541)

        |                 `-{automount}(4544)

....(中间省略)....

        |-sshd(4586)---sshd(16903)---bash(16905)---pstree(16967)

....(中间省略)....

        |-xfs(4692,xfs)   <==由于此程序拥有者并不是执行 pstree 者!所以列出帐号

....(底下省略)....

在括号 () 内的即是 PID 以及该程序的 owner;因为当前用户为ROOT所以没有显示出来。 

假设要找程序之间的相关性,直接输入 pstree 能够查到程序相关性,如上表所看到的,还会使用线段将相关性程序连结起来! 一般连结符号能够使用 ASCII 码就可以,但有时由于语系问题会主动的以 Unicode 的符号来连结, 但由于可能终端机无法支持该编码,也许会造成乱码问题。因此能够加上 -A 选项来克服此类线段乱码问题。

由 pstree 的输出我们也能够非常清楚的知道,全部的程序都是依附在 init 这支程序底下的! 细致看一下,这支程序的 PID 是一号!由于他是由 Linux 核心所主动呼叫的第一支程序!所以 PID 就是一号了。 这也是我们刚刚提到僵尸程序时有提到遇到僵尸进程是要重新启动, 由于重新启动就是又一次启动 init 

假设还想要知道 PID 与所属使用者,加上 -u 及 -p 两个參数就可以。

三、Top

[root@instructor Desktop]# top [-d 数字] | top [-bnp]

选项与參数:

-d  :后面能够接秒数,就是整个程序画面升级的秒数。默认是 秒;

-b  :以批量的方式执行 top ,一般会搭配数据流重导向来将批量的结果输出成为文件。

-n  :与 -b 搭配,意义是,须要进行几次 top 的输出结果。

-p  :指定某些个 PID 来进行观察监測而已。

在 top 执行过程其中能够使用的按键命令:

:显示在 top 其中能够输入的按键命令;

:以 CPU 的使用资源排序显示;

:以 Memory 的使用资源排序显示;

:以 PID 来排序喔!

:由该 Process 使用的 CPU 时间累积 (TIME+) 排序。

:给予某个 PID 一个讯号  (signal)

:给予某个 PID 又一次制订一个 nice 值。

:离开 top 软件的按键。

事实上 top 的功能许多!能够用的按键也很的多!能够參考 man top 的内部说明文件! 

范例一:每两秒钟刷新一次 top ,观察总体资讯:

[root@instructor Desktop]# top -d 2

top - 17:03:09 up 7 days, 16:16,  1 user,  load average: 0.00, 0.00, 0.00

Tasks:  80 total,   1 running,  79 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.5%us,  0.5%sy,  0.0%ni, 99.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    742664k total,   681672k used,    60992k free,   125336k buffers

Swap:  1020088k total,       28k used,  1020060k free,   311156k cached

    <==假设添� 或 时,就会有相关的字样出如今这里喔!

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND     

14398 root      15   0  2188 1012  816 R  0.5  0.1   0:00.05 top

    1 root      15   0  2064  616  528 S  0.0  0.1   0:01.38 init

    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0

    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0

top 也是个挺不错的程序观察工具!但不同于 ps 是静态的结果输出, top 这个程序能够持续的监測整个系统的程序工作状态。 在默认的情况下,每次刷新程序资源的时间为 秒,只是,能够使用 -d 来进行改动。 top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共同拥有六行,显示的内容依序是:

第一行(top...):这一行显示的信息分别为: 

眼下的时间,即 17:03:09 ; 

启动到眼下为止所经过的时间,即 up 7days, 16:16 ; 

已经登陆系统的使用者人数,即 1 user; 

系统在 1, 5, 15 分钟的平均工作负载。 

第二行(Tasks...):显示的是眼下程序的总量与个别程序在什么状态(running, sleeping, stopped, zombie)。 比較须要注意的是最后的 zombie 那个数值,假设不是 !好好看看究竟是哪个 process 变成了僵尸进程?

第三行(Cpus...):显示的是 CPU 的总体负载,每一个项目可使用 查阅。须要特别注意的是 %wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比較大!因此这里得要注意这个项目耗用 CPU 的资源! 另外,假设是多核心的设备,能够按下数字键『1』来切换成不同 CPU 的负载率。

第四行与第五行:表示眼下的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申,要注意的是 swap 的使用量要尽量的少!假设 swap 被用的非常大量,表示系统的实体内存实在不足!

第六行:这个是当在 top 程序其中输入命令时,显示状态的地方。 

top 下半部分的画面,则是每一个 process 使用的资源情况。比較须要注意的是:

PID :每一个 process 的 ID 啦! 

USER:该 process 所属的使用者; 

PR Priority 的简写,程序的优先执行顺序,越小越早被执行; 

NI Nice 的简写,与 Priority 有关,也是越小越早被执行; 

%CPUCPU 的使用率; 

%MEM:内存的使用率; 

TIME+CPU 使用时间的累加; 

top 默认使用 CPU 使用率 (%CPU) 作为排序的重点,假设你想要使用内存使用率排序,则能够按下『M』, 若要回复则按下『P』就可以。假设想要离开 top 则按下『 』吧!假设你想要将 top 的结果输出成为文件时, 能够这样做:

范例二:将 top 的刷新进行 次,然后将结果输出到 /tmp/top.txt

[root@instructor Desktop]# top -b -n 2 > /tmp/top.txt

我们能够仅观察单一程序!例如以下所看到的:

范例三:我们自己的 bash PID 可由 $$ 变量取得,请使用 top 持续观察该 PID

[root@instructor Desktop]# echo $$

13639  <==就是这个数字!他就当前 bash 的 PID

[root@instructor Desktop]# top -d 2 -p 13639

top - 17:31:56 up 7 days, 16:45,  1 user,  load average: 0.00, 0.00, 0.00

Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    742664k total,   682540k used,    60124k free,   126548k buffers

Swap:  1020088k total,       28k used,  1020060k free,   311276k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

13639 root      15   0  5148 1508 1220 S  0.0  0.2   0:00.18 bash

改动 NI 数值,能够这样做:

范例四:承上题,上面的 NI 值是 ,想要改成 10 的话?

在范例三的 top 画面其中直接按下 之后,会出现例如以下的图样!

top - 17:34:24 up 7 days, 16:47,  1 user,  load average: 0.00, 0.00, 0.00

Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni, 99.5%id,  0.0%wa,  0.0%hi,  0.5%si,  0.0%st

Mem:    742664k total,   682540k used,    60124k free,   126636k buffers

Swap:  1020088k total,       28k used,  1020060k free,   311276k cached

PID to renice: 13639  <==按下 然后输入这个 PID 号码

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

13639 root      15   0  5148 1508 1220 S  0.0  0.2   0:00.18 bash

在你完毕上面的动作后,在状态列会出现例如以下的资讯:

Renice PID 13639 to value: 10   <==这是 nice 

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

接下来你就会看到例如以下的显示画面!

top - 17:38:58 up 7 days, 16:52,  1 user,  load average: 0.00, 0.00, 0.00

Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st

Mem:    742664k total,   682540k used,    60124k free,   126648k buffers

Swap:  1020088k total,       28k used,  1020060k free,   311276k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

13639 root      26  10  5148 1508 1220 S  0.0  0.2   0:00.18 bash

四、Killkillall

程序之间是能够互相控制的!举例来说,你能够关闭、又一次启动server软件,server软件本身是个程序, 你既然能够让她关闭或启动,当然就是能够控制该程序!那么程序是怎样互相管理的呢?事实上是透过给予该程序一个讯号 (signal) 去告知该程序你想要让它作什么!

基本的讯号代号与名称相应及内容是:

代号

名称

内容

1

SIGHUP

启动被终止的程序,可让该 PID 又一次读取自己的配置档,类似又一次启动

2

SIGINT

相当於用键盘输入 [ctrl]-c 来中断一个程序的进行

9

SIGKILL

代表强制中断一个程序的进行,假设该程序进行到一半, 那么尚未完毕的部分可能会有『半产品』产生,类似 vim会有 .filename.swp 保留下来。

15

SIGTERM

以正常的结束程序来终止该程序。由於是正常的终止, 所以兴许的动作会将他完毕。只是,假设该程序已经发生故障,就是无法使用正常的方法终止时, 输入这个 signal 也是没实用的。

17

SIGSTOP

相当於用键盘输入 [ctrl]-z 来暂停一个程序的进行

1、Kill

kill [-s sigspec | -n signum | -sigspec] pid | jobspec … or kill -l [sigspec]

  说明:kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程依据该信号而做特定的动作,若没有指定,预设是送出终止 (TERM) 的信号

  -s (signal) : 当中经常使用的讯号有 HUP (1),KILL (9),TERM (15),分别代表着重跑,砍掉,结束具体的信号能够用 kill -l (见下结果,可用数字带入)

  -p : 印出 pid,并不送出信号

  -l (signal) : 列出全部可用的信号名称

  这个就是kill -l的查询结果:

  1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL

  5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

  9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2

  13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT

  17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

  21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU

  25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH

  29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN

  35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4

  39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

  43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12

  47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14

  51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10

  55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6

  59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

  63) SIGRTMAX-1 64) SIGRTMAX

  一般范例:

  将 pid 为 323 的线程砍掉 (kill) :

  kill -9 323

  将 pid 为 456 的线程重跑 (restart) :

  kill -HUP 456

  一般来讲,查询PID的命令是

  ps -ef | grep yum(表示查询的是yumPID,依据查询的东西不同而异)。

  举一个实际的样例:

  例如说,fedora的在线更新命令yum锁锁住了,常见的提示是

  Existing lock /var/run/yum.pid: another copy is running as pid 19698.

  Another app is currently holding the yum lock; waiting for it to exit

  Another app is currently holding the yum lock; waiting for it to exit

  Another app is currently holding the yum lock; waiting for it to exit

  Another app is currently holding the yum lock; waiting for it to exit

  Another app is currently holding the yum lock; waiting for it to exit

  …….

  这里就不是必需使用ps命令了,由于已经知道PID就是19698这个值了,因此不用在查询。

  这时就要使用kill19698的进程杀死。当中的19698就是PID

  所以在命令行内输入:

  kill -9 19698

  就能成功的杀死这个进程。

  kill的改进使用方法例如以下:

  (1)把ps的查询结果通过管道给grep查找包括特定字符串的进程。管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。

  $ ps -ef | grep firefox

  smx 1827 1 4 11:38 ? 00:27:33 /usr/lib/firefox-3.6.18/firefox-bin

  smx 12029 1824 0 21:54 pts/0 00:00:00 grep color=auto firefox

  这次就清爽了。然后就是

  $kill -s 9 1827

  还是嫌打字多?

  (2)使用pgrep

  一看到pgrep首先会想到什么?没错,greppgrepp表明了这个命令是专门用于进程查询的grep

  $ pgrep firefox

  1827

  看到了什么?没错火狐的PID,接下来又要打字了:

  $kill -s 9 1827

2、Killall

[root@instructor Desktop]# killall [-ire] [command name]

參数:

-i : interactive 的意思,交互式的,若须要删除时,会出现提示符给用户;

-eexact 的意思,表示后面接的command name要一致,但整个完整的命令不能超过15个字符。

-l:命令名称(可能含參数)忽略大写和小写。

范例一:给予syslogd这个命令启动的PID一个SIGHUP的信号

[root@instructor Desktop]# killall -l syslogd

范例二:强制终止全部以httpd启动的进程

[root@instructor Desktop]# killall -9 httpd

范例三:依次询问每一个bash进程是否须要被终止执行

[root@instructor Desktop]# killall -i -9 bash

Kill bash(16905)?y/n) n <==不杀死

Kill bash(17351)?(y/n)y ,<==杀死

具有互动的功能,能够询问你是否要删除bash这个进程。若没有-i的參数,全部的bash都会被这个root给杀掉!包含root自己的bash


原文地址:https://www.cnblogs.com/hrhguanli/p/4089694.html