• Linux之PS命令


    ps命令用来列出系统中当前运行的那些进程,该命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程。如果想要动态的显示进程信息,就可以使用top命令。

    要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而 ps 命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

    kill命令用于杀死进程。

    linux上进程有5种状态:  

    1. 运行(正在运行或在运行队列中等待) 

    2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号) 

    3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生) 

    4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放) 

    5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行) 

    ps工具标识进程的5种状态码:  

    R 运行 runnable (on run queue) 

    S 中断 sleeping

    D 不可中断 uninterruptible sleep (usually IO) 

    Z 僵死 a defunct (”zombie”) process 

    T 停止 traced or stopped 

    命令参数:

    a            显示所有进程

    -a          显示不与terminal(终端)有关的所有程序

    -A           显示所有进程

    c             显示进程的真实名称

    -N          反向选择

    -e          等于“-A”

    e           显示环境变量

    f            显示程序间的关系

    -H          显示树状结构

    -l           较详细列出某个PID的信息

    r            显示当前终端的进程

    T            显示当前终端的所有程序

    u            显示有效用户(effective user)相关的进程

    -au           显示较详细的资讯

    -aux        显示所有包含其他使用者的行程 

    -C<命令>    列出指定命令的状况

    --lines<行数>      每页显示的行数

    --width<字符数>   每页显示的字符数

    --help             显示帮助信息

    --version       显示版本显示

    ps命令常用用法(方便查看系统进程):
    ps a    显示现行终端机下的所有程序,包括其他用户的程序。
    ps -A   显示所有进程。
    ps  c   列出程序时,显示每个程序真正的指令名称,而不包含路径,参数或常驻服务的标示。
    ps -e  此参数的效果和指定"A"参数相同。
    ps e   列出程序时,显示每个程序所使用的环境变量。
    ps f   用ASCII字符显示树状结构,表达程序间的相互关系。
    ps -H  显示树状结构,表示程序间的相互关系。
    ps -N  显示所有的程序,除了执行ps指令终端机下的程序之外。
    ps s   采用程序信号的格式显示程序状况。
    ps S   列出程序时,包括已中断的子程序资料。
    ps -t<终端机编号>  指定终端机编号,并列出属于该终端机的程序的状况。
    ps u   以用户为主的格式来显示程序状况。
    ps x   显示所有程序,不以终端机来区分。

    ps -ef  显示父进程

    实例:

    ① 显示所有进程信息

    [vurtne@localhost Desktop]$ ps -A

       PID TTY        TIME    CMD

         1   ?        00:00:04 systemd

         2   ?        00:00:00 kthreadd

         3   ?        00:00:00 ksoftirqd/0

         5   ?        00:00:00 kworker/0:0H

    ...  ...

    ② 显示指定用户信息

    [vurtne@localhost Desktop]$ ps -u vurtne

       PID TTY         TIME    CMD

      2962  ?        00:00:00 gnome-keyring-d

      2964  ?        00:00:00 gnome-session

      2972  ?        00:00:00 dbus-launch

    ...  ...

    ③ 显示所有进程信息,连同命令行

    [vurtne@localhost Desktop]$ ps -ef

    UID         PID   PPID  C STIME TTY         TIME     CMD

    root          1      0     0   22:41   ?        00:00:04   /usr/lib/systemd/systemd --switched-root --

    root          2      0     0   22:41   ?        00:00:00  [kthreadd]

    root          3      2     0   22:41   ?        00:00:00  [ksoftirqd/0]

    ...  ...

    ④ ps与grep常用组合用法,查找特定进程

    [vurtne@localhost Desktop]$ ps -ef | grep ssh

    root        1473      1      0 22:41    ?       00:00:00 /usr/sbin/sshd -D

    vurtne     3106   2964  0 22:45    ?       00:00:00 /usr/bin/ssh-agent /bin/sh -c exec -l  /bin/bash -c "env 

                                              GNOME_SHELL_SESSION_MODE=classic gnome-session --session gnome-classic"

    vurtne     5205   3976  0 23:06  pts/0  00:00:00 grep --color=auto ssh

    ⑤ 将目前属于自己这次登入的PID与相关信息列示出来

    [vurtne@localhost Desktop]$ ps -l

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

    0  S  1000   3976   3898  0  80   0   -  29063     wait      pts/0    00:00:00 bash

    0  R  1000   5459   3976  0  80   0   -  30315       -        pts/0    00:00:00  ps

    说明:

    F     代表这个程序的旗标(flag),4代表使用者为super user

    S     代表这个程序的状态(STAT),关于各STAT的意义将在内文介绍

    UID   程序被该UID所拥有

    PID   就是这个程序的ID!

    PPID  则是其上级父程序的ID

    C     CPU使用的资源百分比

    PRI   这个是Priority(优先执行序)的缩写,详细后面介绍

    NI    这个是Nice值,在下一小节我们会持续介绍

    ADDR  这个是kernel function,指出该程序在内存的那个部分。如果是个running的程序,

           一般就是"-"

    SZ    使用掉的内存大小

    WCHAN 目前这个程序是否正在运作当中,若为 - 表示正在运作

    TTY   登入者的终端机位置

    TIME  使用掉的 CPU 时间。

    CMD   所下达的指令为何

    在预设的情况下,ps仅会列出与目前所在的bash shell有关的PID而已,所以当我使用ps -l的时候,只有三个PID。

    ⑥ 列出目前所有的正在内存当中的程序

    [vurtne@localhost Desktop]$ ps aux

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

    root       1     0.2      0.9     53684  4764  ?     Ss      22:41   0:05  /usr /lib /systemd/systemd --switched-root 

                                                                                                       --system --deserialize 23

    root       2    0.0      0.0         0         0     ?     S        22:41   0:00  [kthreadd]

    root       3    0.0      0.0         0         0     ?     S        22:41   0:00  [ksoftirqd/0]

    root       5    0.0      0.0         0         0     ?     S<     22:41   0:00  [kworker/0:0H]

    ...  ...

    说明:

    USER:process使用者账号

    PID :process号码

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

    %MEM:process所占用的物理内存百分比

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

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

    TTY :process是在那个终端机上面运作,若与终端机无关,则显示?,另外,tty1-tty6

          是本机上面的登入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。

    STAT:该程序目前的状态,主要的状态有

    R  :该程序目前正在运作,或者是可被运作

    S  :该程序目前正在睡眠当中(可说是idle状态),但可被某些讯号(signal)唤醒。

    T  :该程序目前正在侦测或者是停止了

    Z  :该程序应该已经终止,但是其父程序却无法正常的终止他,造成zombie(疆尸)程序

          的状态

    START:process被触发启动的时间

    TIME :process实际使用CPU运作的时间

    COMMAND:该程序的实际指令

    ⑦ 列出类似程序树的程序显示

    [vurtne@localhost Desktop]$ ps -axjf

      PPID    PID   PGID    SID TTY       TPGID STAT  UID  TIME  COMMAND

         0       2        0           0   ?          -1      S       0    0:00   [kthreadd]

         2       3        0           0   ?           1      S       0     0:00   \_ [ksoftirqd/0]

         2       5        0           0   ?          -1      S<    0     0:00   \_ [kworker/0:0H]

    ...  ...

    ⑧ 找出与 cron 与 syslog 这两个服务有关的 PID 号码

    [vurtne@localhost Desktop]$ ps aux | egrep '(cron|syslog)'

    root         892   0.0  0.3 208000  1704   ?       Ssl   22:41    0:01  /usr/sbin/rsyslogd -n

    root         929   0.0  0.0 126300    380   ?       Ss    22:41   0:01  /usr/sbin/crond -n

    vurtne     7008  0.0  0.1 108060    892 pts/0  S+   23:30   0:00 egrep --color=auto (cron|syslog)

    说明:

    a. 可以用“|”管道和more连接起来分页查看

    ps -aux | more

    b. 把所有进程显示出来,并输出到ps001.txt文件

    ps -aux > ps001.txt  或者

    ps -lA >ps001.txt                    ps -axjf    连同部分进程树状态

    c. 输出指定的字段

    [vurtne@localhost Desktop]$  ps -o pid,ppid,pgrp,session,tpgid,comm

       PID   PPID   PGRP   SESS  TPGID COMMAND

      3976   3898   3976   3976   7512 bash

      7512   3976   7512   3976   7512 ps

    kill 终止(杀死)进程,有十几种控制进程的方法,下面是一些常用的方法:
    [root@localhost ~]#kill -STOP [pid]
    发送SIGSTOP (17,19,23)停止一个进程,而并不消灭这个进程。
    [root@localhost ~]#kill -CONT [pid]
    发送SIGCONT (19,18,25)重新开始一个停止的进程。
    [root@localhost ~]#kill -KILL [pid]
    发送SIGKILL (9)强迫进程立即停止,并且不实施清理操作。
    [root@localhost ~]#kill -9 -1
    终止你拥有的全部进程。
    SIGKILL 和 SIGSTOP 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。

  • 相关阅读:
    Linux查看进程是否存在及启动或重启
    Leetcode 31.下一个排列 tag数组
    Leetccode 27.移除元素 tag数组
    Leetcode 24:两两交换链表中的节点
    当代90后的焦虑
    典型java面试题
    TD编译环境变量说明
    ubuntu20.04安装TD工具后编译错误
    ssh免密登录在Linux服务器之间的设置
    ubuntu20.04导航栏放到底部
  • 原文地址:https://www.cnblogs.com/vurtne-lu/p/6273923.html
Copyright © 2020-2023  润新知