zoukankan      html  css  js  c++  java
  • linux命令学习之:ps

      Linux中的ps命令是Process Status的缩写。ps命令用于报告当前系统的进程状态,列出系统中当前运行的那些进程。可以搭配kill指令随时中断、删除不必要的程序。

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

      ps 为我们提供了进程的一次性的查看,也就是是当前那些进程的快照,它所提供的查看结果并不动态连续的;如果想对进程时间监控,应该用 top 工具。

      kill 命令用于杀死进程。

    linux上进程有5种状态: 

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

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

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

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

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

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

    D 不可中断 uninterruptible sleep (usually IO) 

    R 运行 runnable (on run queue) 

    S 中断 sleeping 

    T 停止 traced or stopped 

    Z 僵死 a defunct (”zombie”) process

    语法:

      ps(选项)

    选项说明:

    -a:显示所有终端机下执行的程序,除了阶段作业领导者之外。

    a:显示现行终端机下的所有程序,包括其他用户的程序。

    -A:显示所有程序。

    -c:显示CLS和PRI栏位。

    c:列出程序时,显示每个程序真正的指令名称,而不包含路径,选项或常驻服务的标示。

    -C<指令名称>:指定执行指令的名称,并列出该指令的程序的状况。

    -d:显示所有程序,但不包括阶段作业领导者的程序。

    -e:此选项的效果和指定"A"选项相同。

    e:列出程序时,显示每个程序所使用的环境变量。

    -f:显示UID,PPIP,C与STIME栏位。

    f:用ASCII字符显示树状结构,表达程序间的相互关系。

    -g<群组名称>:此选项的效果和指定"-G"选项相同,当亦能使用阶段作业领导者的名称来指定。

    g:显示现行终端机下的所有程序,包括群组领导者的程序。

    -G<群组识别码>:列出属于该群组的程序的状况,也可使用群组名称来指定。

    h:不显示标题列。

    -H:显示树状结构,表示程序间的相互关系。

    -j或j:采用工作控制的格式显示程序状况。

    -l或l:采用详细的格式来显示程序状况。

    L:列出栏位的相关信息。

    -m或m:显示所USER和WCHAN栏位。

    -N:显示所有的程序,除了执行ps指令终端机下的程序之外。

    -p<程序识别码>:指定程序识别码,并列出该程序的状况。

    p<程序识别码>:此选项的效果和指定"-p"选项相同,只在列表格式方面稍有差异。

    r:只列出现行终端机正在执行中的程序。

    -s<阶段作业>:指定阶段作业的程序识别码,并列出隶属该阶段作业的程序的状况。

    s:采用程序信号的格式显示程序状况。

    S:列出程序时,包括已中断的子程序资料。

    -t<终端机编号>:指定终端机编号,并列出属于该终端机的程序的状况。

    t<终端机编号>:此选项的效果和指定"-t"选项相同,只在列表格式方面稍有差异。

    -T:显示现行终端机下的所有程序。

    -u<用户识别码>:此选项的效果和指定"-U"选项相同。

    u:以用户为主的格式来显示程序状况。

    -U<用户识别码>:列出属于该用户的程序的状况,也可使用用户名称来指定。

    U<用户名称>:列出属于该用户的程序的状况。

    v:采用虚拟内存的格式显示程序状况。

    -V或V:显示版本信息。

    -w或w:采用宽阔的格式来显示程序状况。 

    x:显示所有程序,不以终端机来区分。

    X:采用旧式的Linux i386登陆格式显示程序状况。

    -y:配合选项"-l"使用时,不显示F(flag)栏位,并以RSS栏位取代ADDR栏位 。

    -<程序识别码>:此选项的效果和指定"p"选项相同。

    --cols<每列字符数>:设置每列的最大字符数。

    --columns<每列字符数>:此选项的效果和指定"--cols"选项相同。

    --cumulative:此选项的效果和指定"S"选项相同。

    --deselect:此选项的效果和指定"-N"选项相同。

    --forest:此选项的效果和指定"f"选项相同。

    --headers:重复显示标题列。

    --help:在线帮助。

    --info:显示排错信息。

    --lines<显示列数>:设置显示画面的列数。

    --no-headers:此选项的效果和指定"h"选项相同,只在列表格式方面稍有差异。

    --group<群组名称>:此选项的效果和指定"-G"选项相同。

    --Group<群组识别码>:此选项的效果和指定"-G"选项相同。

    --pid<程序识别码>:此选项的效果和指定"-p"选项相同。

    --rows<显示列数>:此选项的效果和指定"--lines"选项相同。

    --sid<阶段作业>:此选项的效果和指定"-s"选项相同。

    --tty<终端机编号>:此选项的效果和指定"-t"选项相同。

    --user<用户名称>:此选项的效果和指定"-U"选项相同。

    --User<用户识别码>:此选项的效果和指定"-U"选项相同。

    --version:此选项的效果和指定"-V"选项相同。

    --widty<每列字符数>:此选项的效果和指定"-cols"选项相同。

    常用示例:

    1、显示所有进程信息

      命令:ps -A

    [root@CTU1000094955 ~]# ps -A
       PID TTY          TIME CMD
         1 ?        00:20:52 systemd
         2 ?        00:00:12 kthreadd
         3 ?        00:00:00 ksoftirqd/0
         5 ?        00:00:00 kworker/0:0H
         7 ?        00:00:27 migration/0
         8 ?        00:00:00 rcu_bh
         9 ?        00:00:00 rcuob/0
        ... ...#中间省略了部分
     59785 ?        00:00:00 sshd
     59795 pts/0    00:00:00 bash
     60283 ?        00:00:00 kworker/1:2
     60948 ?        00:00:00 kworker/2:2
     62872 ?        00:00:00 kworker/0:1
     64181 ?        00:00:01 setroubleshootd
     64187 ?        00:00:00 sleep
     64258 pts/0    00:00:00 ps
     64259 ?        00:00:00 kworker/3:0
     68591 ?        00:24:13 java
     85204 ?        00:10:33 accounts-daemon
    103598 ?        00:00:00 mysqld_safe
    103762 ?        00:20:03 mysqld
    120139 ?        00:00:14 kworker/u256:0
    126191 ?        01:53:16 polkitd

    2、显示指定用户信息

      命令:ps -u root

    [root@CTU1000094955 ~]# ps -u root
       PID TTY          TIME CMD
         1 ?        00:20:52 systemd
         2 ?        00:00:12 kthreadd
         3 ?        00:00:00 ksoftirqd/0
         5 ?        00:00:00 kworker/0:0H
         7 ?        00:00:27 migration/0
         8 ?        00:00:00 rcu_bh
         9 ?        00:00:00 rcuob/0
        10 ?        00:00:00 rcuob/1
        ... ... 中间省略了部分
     59785 ?        00:00:00 sshd
     59795 pts/0    00:00:00 bash
     65450 ?        00:00:00 sleep
     65521 pts/0    00:00:00 ps
     68591 ?        00:24:15 java
     85204 ?        00:10:33 accounts-daemon
    103598 ?        00:00:00 mysqld_safe
    120139 ?        00:00:14 kworker/u256:0

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

      命令:ps -ef

    [root@CTU1000094955 ~]# ps -ef
    UID         PID   PPID  C STIME TTY          TIME CMD
    root          1      0  0 Oct04 ?        00:20:52 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root          2      0  0 Oct04 ?        00:00:12 [kthreadd]
    root          3      2  0 Oct04 ?        00:00:00 [ksoftirqd/0]
    root          5      2  0 Oct04 ?        00:00:00 [kworker/0:0H]
    root          7      2  0 Oct04 ?        00:00:27 [migration/0]
    ... ... 中间省略了部分
    root      59785  25566  0 10:52 ?        00:00:00 sshd: root@pts/0
    root      59795  59785  0 10:52 pts/0    00:00:00 -bash
    root      65870    861  0 11:15 ?        00:00:00 sleep 60
    root      65915  59795  0 11:16 pts/0    00:00:00 ps -ef
    root      68591      1  0 Nov16 ?        00:24:15 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apa
    root      85204      1  0 Oct30 ?        00:10:33 /usr/libexec/accounts-daemon
    root     103598      1  0 Oct30 ?        00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
    mysql    103762 103598  0 Oct30 ?        00:20:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/log/mariadb/maria
    root     120139      2  0 Nov11 ?        00:00:14 [kworker/u256:0]
    polkitd  126191      1  0 Oct10 ?        01:53:17 /usr/lib/polkit-1/polkitd --no-debug

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

      命令:ps -ef|grep ssh

    [root@CTU1000094955 ~]# ps -ef|grep ssh
    root      25566      1  0 Oct31 ?        00:00:00 /usr/sbin/sshd -D
    root      59785  25566  0 10:52 ?        00:00:00 sshd: root@pts/0
    root      66142  59795  0 11:18 pts/0    00:00:00 grep --color=auto ssh

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

      命令:ps -l

    [root@CTU1000094955 ~]# ps -l
    F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    4 S     0  59795  59785  0  80   0 - 30751 wait   pts/0    00:00:00 bash
    0 R     0  66798  59795  0  80   0 - 34861 -      pts/0    00:00:00 ps

      说明:

    F 代表这个程序的旗标 (flag):4 代表此进程的权限为root;为1表示此子进程仅可进行复制(fork),而无法实际执行(exec)。

    S 代表这个程序的状态 (STAT),关于各 STAT 的含义已在上问题出。

    UID 程序被该 UID 所拥有

    PID 就是这个程序的 ID !

    PPID 则是其上级父程序的ID

    C CPU 使用的资源百分比

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

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

    SZ 使用掉的内存大小

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

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

    TIME 使用掉的 CPU 时间。是此进程实际花费CPU运行的时间,而不是系统时间。

    CMD Command的缩写,造成此程序的触发进程的命令为何种命令

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

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

      命令:ps aux

    [root@CTU1000094955 ~]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1 201588 13760 ?        Ss   Oct04  20:53 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root          2  0.0  0.0      0     0 ?        S    Oct04   0:12 [kthreadd]
    root          3  0.0  0.0      0     0 ?        S    Oct04   0:00 [ksoftirqd/0]
    ... ...中间省略了部分内容
    root      68591  0.2 12.5 5609960 936952 ?      Sl   Nov16  24:18 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging
    root      70812  0.0  0.0 116272   708 ?        S    11:34   0:00 sleep 60
    root      70892  0.0  0.0 141564  1692 pts/0    R+   11:35   0:00 ps aux
    root      85204  0.0  0.0 384676  3780 ?        Ssl  Oct30  10:33 /usr/libexec/accounts-daemon
    root     103598  0.0  0.0  18084  1732 ?        S    Oct30   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
    mysql    103762  0.0  6.4 2293168 478984 ?      Sl   Oct30  20:06 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/l
    root     120139  0.0  0.0      0     0 ?        S    Nov11   0:14 [kworker/u256:0]
    polkitd  126191  0.1  6.3 990528 473472 ?       Ssl  Oct10 113:22 /usr/lib/polkit-1/polkitd --no-debug

      说明(与ps -l并不相同):

    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:该程序的实际指令

    7、列出类似程序树的程序显示

      命令:ps -axjf

    [root@CTU1000094955 ~]# ps -axjf
      PPID    PID   PGID    SID TTY       TPGID STAT   UID   TIME COMMAND
         0      2      0      0 ?            -1 S        0   0:12 [kthreadd]
         2      3      0      0 ?            -1 S        0   0:00  \_ [ksoftirqd/0]
         2      5      0      0 ?            -1 S<       0   0:00  \_ [kworker/0:0H]
         2      7      0      0 ?            -1 S        0   0:27  \_ [migration/0]
    
        ... ...中间省略了部分内容
         1 126191 126191 126191 ?            -1 Ssl    997 113:23 /usr/lib/polkit-1/polkitd --no-debug
    126191  20349 126191 126191 ?            -1 Z      997   0:00  \_ [pkla-check-auth] <defunct>1  85204  85204  85204 ?            -1 Ssl      0  10:33 /usr/libexec/accounts-daemon
         1 103598 103580  85217 ?            -1 S        0   0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/CTU1000094955.pid
    103598 103762 103580  85217 ?            -1 Sl      27  20:06  \_ /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/l
         1  25566  25566  25566 ?            -1 Ss       0   0:00 /usr/sbin/sshd -D
     25566  59785  59785  59785 ?            -1 Ss       0   0:00  \_ sshd: root@pts/0
     59785  59795  59795  59795 pts/0     71869 Ss       0   0:00      \_ -bash
     59795  71869  71869  59795 pts/0     71869 R+       0   0:00          \_ ps -axjf
         1  68591  68583  16869 ?            -1 Sl       0  24:19 /biz/maas/cmdp/jre/bin/java -Djava.util.logging.config.file=/biz/maas/cmdp/tomcat/conf/logging.properties -Djava.util.logging.man
         1  71817    829    829 ?            -1 Sl     991   0:01 /usr/bin/python -Es /usr/sbin/setroubleshootd -f

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

      命令:ps aux | egrep '(cron|syslog)'

    [root@CTU1000094955 ~]# ps aux | egrep '(cron|syslog)'
    root        856  0.0  0.2 506844 16808 ?        Ssl  Oct04  57:17 /usr/sbin/rsyslogd -n
    root       1768  0.0  0.0 130480  1528 ?        Ss   Oct04   1:20 /usr/sbin/crond -n
    gnome-i+   5961  0.0  0.0 477312  3576 ?        S<l  Oct04   0:13 /usr/bin/pulseaudio --start --log-target=syslog
    root      72278  0.0  0.0 118872  1040 pts/0    S+   11:45   0:00 grep -E --color=auto (cron|syslog)

    9、可以用 | 管道和 more 连接起来分页查看

      命令:ps -aux |more

    [root@CTU1000094955 ~]# ps -aux |more
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1 201588 13760 ?        Ss   Oct04  20:53 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
    root          2  0.0  0.0      0     0 ?        S    Oct04   0:12 [kthreadd]
    ... ... 中间省略了部分
    root         35  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/26]
    root         36  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/27]
    root         37  0.0  0.0      0     0 ?        S    Oct04   0:00 [rcuob/28]
    --More--

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

      命令:ps -aux > 目的文件

    [root@CTU1000094955 ~]# ps -aux > pstest.txt
    [root@CTU1000094955 ~]# ll
    total 76
    -rw-------. 1 root root  1664 Jan 16  2017 anaconda-ks.cfg
    drwxr-xr-x. 2 root root  4096 Jan 16  2017 Desktop
    drwxr-xr-x. 2 root root  4096 Jan 16  2017 Documents
    drwxr-xr-x. 5 root root  4096 Nov  1 18:16 Downloads
    -rw-------. 1 root root  1712 Jan 16  2017 initial-setup-ks.cfg
    drwxr-xr-x. 2 root root  4096 Jan 16  2017 Music
    drwxr-xr-x. 2 root root  4096 Jan 16  2017 Pictures
    -rw-r--r--. 1 root root 36460 Nov 23 11:50 pstest.txt

    11、输出指定的字段

      命令:ps -o pid,ppid,pgrp,session,tpgid,comm

    [root@CTU1000094955 ~]# ps -o pid,ppid,pgrp,session,tpgid,comm
       PID   PPID   PGRP   SESS  TPGID COMMAND
     59795  59785  59795  59795  73308 bash
     73308  59795  73308  59795  73308 ps
  • 相关阅读:
    Java三大特性与实战
    Java数组
    Java流程控制,for,switch,while.break,continue,return
    洛谷——P1498 南蛮图腾
    洛谷——P1010 幂次方
    洛谷——P1147 连续自然数和
    洛谷——P1514 引水入城
    洛谷——1538 迎春舞会之数字舞蹈
    普及练习场之排序Ex
    普及练习场之排序
  • 原文地址:https://www.cnblogs.com/jing99/p/7884297.html
Copyright © 2011-2022 走看看