gavanwanggw

导航

Linux进程管理 - ps,top,pstree,signal,kill,killall举例演示

ps:将某个时间点的进程执行情况撷取下来

[root@www ~]# ps aux  <==观察系统全部的进程数据
[root@www ~]# ps -lA  <==也是可以观察全部系统的数据
[root@www ~]# ps axjf <==连同部分进程树状态
选项与參数:
-A  :全部的 process 均显示出来,与 -e 具有相同的效用。
-a  :不与 terminal 有关的全部 process 。
-u  :有效使用者 (effective user) 相关的 process 。
x   :通常与 a 这个參数一起使用。可列出较完整资讯。

输出格式规划: l :较长、较具体的将该 PID 的的资讯列出; j :工作的格式 (jobs format) -f :做一个更为完整的输出。


ps -l  仅观察自己的bash相关程序

    eg1:将眼下属于自己这次登录的PID与相关咨询列出来(仅仅与自己的bash有关)


        使用ps -l 仅列出与你的bash有关的进程而已,ps -l 显示的数据有:

    F:代表这个进程标识 (process flags),说明这个进程的总结权限。常见号码有:
        若为 4 表示此进程的权限为 root ;
        若为 1 则表示此子进程仅进行复制(fork)而没有实际执行(exec)。

    S:代表这个进程的状态 (STAT),基本的状态有:
        R (Running):该进程正在执行中;
        S (Sleep):该进程眼下正在睡眠状态(idle),但能够被唤醒(signal)。


        D :不可被唤醒的睡眠状态,通常这支进程可能在等待 I/O 的情况(ex>列印)
        T :停止状态(stop)。可能是在工作控制(背景暂停)或除错 (traced) 状态;
        Z (Zombie):僵尸状态,进程已经终止但却无法被移除至内存外。

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

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

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

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



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

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

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


ps aus  观察系统全部进程

eg2:列出眼下全部的正在内存其中的进程:


。。。


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 的 S 旗标同样 (R/S/T/Z)
    START:该 process 被触发启动的时间;
    TIME :该 process 实际使用 CPU 执行的时间。
    COMMAND:该进程的实际命令为何?


ps -lA  显示全部的进程。显示方式与ps -l的输出情况同样



ps axjf  列出类似进程树的程序显示:




top:动态观察程序的变化

[root@www ~]# top [-d 数字] | top [-bnp]
选项与參数:
-d  :后面能够接秒数。就是整个进程画面升级的秒数。默认是 5 秒。
-b  :以批量的方式执行 top ,还有很多其它的參数能够使用喔!

一般会搭配数据流重导向来将批量的结果输出成为文件。 -n :与 -b 搭配,意义是,须要进行几次 top 的输出结果。 -p :指定某些个 PID 来进行观察监測而已。 在 top 执行过程其中能够使用的按键命令: ? :显示在 top 其中能够输入的按键命令。 P :以 CPU 的使用资源排序显示; M :以 Memory 的使用资源排序显示; N :以 PID 来排序喔! T :由该 Process 使用的 CPU 时间累积 (TIME+) 排序。 k :给予某个 PID 一个讯号 (signal) r :给予某个 PID 又一次制订一个 nice 值。 q :离开 top 软件的按键。




        top 主要分为两个画面,上面的画面为整个系统的资源使用状态,基本上总共同拥有六行,显示的内容依序是:

    第一行(top...):这一行显示的资讯分别为:
        眼下的时间,亦即是 18:30:00 那个项目;
        启动到眼下为止所经过的时间,亦即是 up 4:17 那个项目;
        已经登陆系统的使用者人数。亦即是 2 user项目。
        系统在 1, 5, 15 分钟的平均工作负载。代表的是 1, 5, 15 分钟,系统平均要负责执行几个程序(工作)的意思。

越小代表系统越闲置,若高於 1 得要注意你的系统进程是否太过繁复了!



    第二行(Tasks...):显示的是眼下进程的总量与个别进程在什么状态(running, sleeping, stopped, zombie)。

比較须要注意的是最后的 zombie 那个数值,假设不是 0 。好好看看究竟是那个 process 变成僵尸了吧?

    第三行(Cpus...):显示的是 CPU 的总体负载,每一个项目可使用 ?

查阅。

须要特别注意的是 wa ,那个项目代表的是 I/O wait, 通常你的系统会变慢都是 I/O 产生的问题比較大。因此这里得要注意这个项目耗用 CPU 的资源喔!

另外,假设是多核心的设备,能够按下数字键『1』来切换成不同 CPU 的负载率。

    第四行与第五行:表示眼下的实体内存与虚拟内存 (Mem/Swap) 的使用情况。 再次重申。要注意的是 swap 的使用量要尽量的少!

假设 swap 被用的非常大量,表示系统的实体内存实在不足!

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


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

    PID :每一个 process 的 ID 啦!
    SER:该 process 所属的使用者。
    PR :Priority 的简写,进程的优先执行顺序。越小越早被执行。
    NI :Nice 的简写。与 Priority 有关,也是越小越早被执行;
    %CPU:CPU 的使用率。
    %MEM:内存的使用率;
    TIME+:CPU 使用时间的累加;

        top 默认使用 CPU 使用率 (%CPU) 作为排序的重点,假设你想要使用内存使用率排序。则能够按下『M』。 若要回复则按下『P』就可以。假设想要离开 top 则按下『 q 』


eg:自己的bash PID可由变量$$获得,使用top持续观察这个PID



ptree

[root@www ~]# pstree [-A|U] [-up]
选项与參数:
-A  :各进程树之间的连接以 ASCII 字节来连接;
-U  :各进程树之间的连接以万国码的字节来连接。

在某些终端介面下可能会有错误。 -p :并同一时候列出每一个 process 的 PID; -u :并同一时候列出每一个 process 的所属帐号名称。

eg:列出眼下系统上全部的进程树的相关性



eg:同一时候显示PID和users


在括号 () 内的即是 PID 以及该程序的 owner 喔。只是。由於我是使用 

root 的身份执行此一命令。所以属於 root 的程序就不会显示出来啦!


进程的管理

        进程之间是能够互相控制的!举例来说,你能够关闭、又一次启动server软件。server软件本身是个程序, 你既然能够让她关闭或启动。当然就是能够控制该进程啦!

那么进程是怎样互相管理的呢?事实上是透过给予该进程一个讯号 (signal) 去告知该进程你想要让她作什么!


        那么究竟有多少 signal 呢? 你能够使用 kill -l (小写的 L ) 或者是 man 7 signal 都能够查询到。


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

代号 名称 内容
1 SIGHUP 启动被终止的进程。可让该 PID 又一次读取自己的配置档,类似又一次启动
2 SIGINT 相当於用键盘输入 [ctrl]-c 来中断一个进程的进行
9 SIGKILL 代表强制中断一个进程的进行,假设该进程进行到一半, 那么尚未完毕的部分可能会有『半产品』产生,类似 vim会有 .filename.swp 保留下来。

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

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

kill -signal PID

        kill 能够帮我们将这个 signal 传送给某个工作 (%jobnumber) 或者是某个 PID (直接输入数字)。

要再次强调的是: kill 后面直接加数字与加上 %number 的情况是不同的。 这个非常重要喔!由于工作控制中有 1 号工作。可是 PID 1 号则是专指『 init 』这支进程!

你怎么能够将 init 关闭呢? 关闭 init 。你的系统就当掉了啊!所以记得那个 % 是专门用在工作控制的喔!

        了解了这个使用方法以后。假设未来你想要将某个莫名其妙的登陆者的连线删除的话,就能够透过使用 pstree -p 找到相关程序, 然后再以 kill -9 将该程序删除。该条连线就会被踢掉了。


killall -signal 命令名称

[root@www ~]# killall [-iIe] [command name]
选项与參数:
-i  :interactive 的意思,互动式的。若须要删除时。会出现提示字节给使用者。
-e  :exact 的意思,表示『后面接的 command name 要一致』,但整个完整的命令
      不能超过 15 个字节。

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

eg:一次询问每一个bash进程是否须要被终止执行。



        总之,要删除某个进程。我们能够使用 PID 或者是启动该程序的命令名称, 而假设要删除某个服务呢?呵呵!最简单的方法就是利用 killall 。 由于他能够将系统其中所有以某个命令名称启动的程序所有删除。

posted on 2017-05-15 15:32  gavanwanggw  阅读(325)  评论(0编辑  收藏  举报