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

[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# 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: [email protected]/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

[[email protected] ~]# 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: [email protected]/0 
root      66142  59795  0 11:18 pts/0    00:00:00 grep --color=auto ssh

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

  命令:ps -l

[[email protected] ~]# 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

[[email protected] ~]# 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

[[email protected] ~]# 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: [email protected]/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)’

[[email protected] ~]# 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

[[email protected] ~]# 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 > 目的文件

[[email protected] ~]# ps -aux > pstest.txt 
[[email protected] ~]# 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

[[email protected] ~]# 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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/1188.html

(0)
上一篇 2021年7月15日
下一篇 2021年7月15日

相关推荐

发表回复

登录后才能评论