监控系统资源

来源:互联网 发布:淘宝客怎么采集 编辑:程序博客网 时间:2024/05/17 14:21

一、uptimew

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

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

平均负载的最佳值是1,这意味着每个进程都可以立即执行不会错过CPU周期。负载的正常值在不同的系统中有着很大的差别。在单处理器的工作站中,12都是可以接受的。然而在多处理器的服务器上你可能看到810

你能使用uptime来确定是服务器还是网络出了问题。例如如果网络应用程序运行,运行uptime来了解系统负载是否很高。如果负载不高,这个问题很有可能是由于网络引起的而非服务器。

提示:你可以使用 命令来代替 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>

 

当系统不稳定的时候就容易造成所谓的僵尸程序,可能是因为程序写的不好,或者是使用者的操作习惯不良等等所造成。 如果你发现系统中很多僵尸程序时,要找出该程序的父程序,然后做个追踪,进行主机的环境最佳化!看看有什么地方需要改善的,不要只是直接将他 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

程序之间是可以互相控制的!举例来说,你可以关闭、重新启动服务器软件,服务器软件本身是个程序, 你既然可以让她关闭或启动,当然就是可以控制该程序!那么程序是如何互相管理的呢?其实是透过给予该程序一个讯号 (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


1 0
原创粉丝点击