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 信号不能被捕捉、封锁或者忽略,但是,其它的信号可以。所以这是你的终极武器。

原文地址:https://www.cnblogs.com/vurtne-lu/p/6273923.html