每天一个Linux命令(38):ps

ps是Process Status的缩写,用来列出当前系统中运行的进程快照。使用ps可以确定哪些进程正在运行,进程运行的状态,进程是否结束,进程有没有僵死,哪些进程占用过多的资源等。

ps提供一次性地进程查看,结果并不是动态连续的,如果想对进程时间监控,可以用top。kill可用于杀死进程。

linux进程的5种状态:

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

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

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

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

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

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

  • D,uninterruptible sleep (usually IO),不可中断

  • R,runnable (on run queue),运行

  • S,sleeping,中断

  • T,traced or stopped,停止

  • Z,a defunct (”zombie”) process,僵死

1. 命令格式

ps [参数]

2. 命令功能

用来显示当前进程的状态

3. 命令参数

-a,显示同一终端下的所有程序

-A,显示所有进程

-c,显示进程的真实名称

-N,反向选择

-e,等于“-A”

-f,显示程序间的关系

-H,显示树状结构

-r,显示当前终端的进程

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

-u,指定用户的所有进程

-au,显示较详细的资讯

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

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

–lines <行数>,每页显示的行数

–width <字符数>,每页显示的字符数

–help,显示帮助信息

–version,显示版本显示

4. 使用实例

例一:显示所有进程信息

命令:ps -A

# ps -A

PID TTY    TIME     CMD
1 ?        00:00:00 init
2 ?        00:00:01 migration/0
3 ?        00:00:00 ksoftirqd/0
4 ?        00:00:01 migration/1
5 ?        00:00:00 ksoftirqd/1
6 ?        00:29:57 events/0
7 ?        00:00:00 events/1
8 ?        00:00:00 khelper
49 ?       00:00:00 kthread
54 ?       00:00:00 kblockd/0
55 ?       00:00:00 kblockd/1
56 ?       00:00:00 kacpid
217 ?      00:00:00 cqueue/0


例二:显示指定用户信息

命令:ps -u root

# ps -u root

PID TTY    TIME     CMD
1 ?        00:00:00 init
2 ?        00:00:01 migration/0
3 ?        00:00:00 ksoftirqd/0
4 ?        00:00:01 migration/1
5 ?        00:00:00 ksoftirqd/1
6 ?        00:29:57 events/0
7 ?        00:00:00 events/1
8 ?        00:00:00 khelper
49 ?       00:00:00 kthread
54 ?       00:00:00 kblockd/0
55 ?       00:00:00 kblockd/1
56 ?       00:00:00 kacpid


例三:显示所有进程信息,连同命令行

命令:ps -ef

# ps -ef

UID        PID  PPID  C STIME TTY      TIME     CMD
root         1     0  0 Nov02 ?        00:00:00 init [3]                  
root         2     1  0 Nov02 ?        00:00:01 [migration/0]
root         3     1  0 Nov02 ?        00:00:00 [ksoftirqd/0]
root         4     1  0 Nov02 ?        00:00:01 [migration/1]
root         5     1  0 Nov02 ?        00:00:00 [ksoftirqd/1]
root         6     1  0 Nov02 ?        00:29:57 [events/0]
root         7     1  0 Nov02 ?        00:00:00 [events/1]
root         8     1  0 Nov02 ?        00:00:00 [khelper]
root        49     1  0 Nov02 ?        00:00:00 [kthread]
root        54    49  0 Nov02 ?        00:00:00 [kblockd/0]
root        55    49  0 Nov02 ?        00:00:00 [kblockd/1]
root        56    49  0 Nov02 ?        00:00:00 [kacpid]


例四: ps与grep组合,查找特定进程

命令:ps -ef|grep ssh

# ps -ef|grep ssh

root      2720     1  0 Nov02 ?        00:00:00 /usr/sbin/sshd
root     17394  2720  0 14:58 ?        00:00:00 sshd: root@pts/0 
root     17465 17398  0 15:57 pts/0    00:00:00 grep ssh


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

命令:ps -l

# ps -l

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 17398 17394  0  75   0 - 16543 wait   pts/0    00:00:00 bash
4 R     0 17469 17398  0  77   0 - 15877 -      pts/0    00:00:00 ps

说明:

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

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。

例六:列出目前所有的正在内存当中的程序

命令:ps aux

# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  10368   676 ?        Ss   Nov02   0:00 init [3]                  
root         2  0.0  0.0      0     0 ?        S<   Nov02   0:01 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Nov02   0:00 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S<   Nov02   0:01 [migration/1]
root         5  0.0  0.0      0     0 ?        SN   Nov02   0:00 [ksoftirqd/1]
root         6  0.0  0.0      0     0 ?        S<   Nov02  29:57 [events/0]
root         7  0.0  0.0      0     0 ?        S<   Nov02   0:00 [events/1]
root         8  0.0  0.0      0     0 ?        S<   Nov02   0:00 [khelper]
root        49  0.0  0.0      0     0 ?        S<   Nov02   0:00 [kthread]
root        54  0.0  0.0      0     0 ?        S<   Nov02   0:00 [kblockd/0]
root        55  0.0  0.0      0     0 ?        S<   Nov02   0:00 [kblockd/1]
root        56  0.0  0.0      0     0 ?        S<   Nov02   0:00 [kacpid]

说明:

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

例七:列出类似程序树的显示

命令:ps -axjf

# ps -axjf

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
 PPID   PID  PGID   SID TTY      TPGID STAT   UID   TIME COMMAND
    0     1     1     1 ?           -1 Ss       0   0:00 init [3]                  
    1     2     1     1 ?           -1 S<       0   0:01 [migration/0]
    1     3     1     1 ?           -1 SN       0   0:00 [ksoftirqd/0]
    1     4     1     1 ?           -1 S<       0   0:01 [migration/1]
    1     5     1     1 ?           -1 SN       0   0:00 [ksoftirqd/1]
    1     6     1     1 ?           -1 S<       0  29:58 [events/0]
    1     7     1     1 ?           -1 S<       0   0:00 [events/1]
    1     8     1     1 ?           -1 S<       0   0:00 [khelper]
    1    49     1     1 ?           -1 S<       0   0:00 [kthread]
   49    54     1     1 ?           -1 S<       0   0:00  \_ [kblockd/0]
   49    55     1     1 ?           -1 S<       0   0:00  \_ [kblockd/1]
   49    56     1     1 ?           -1 S<       0   0:00  \_ [kacpid]


例八:找出与cron,syslog有关的PID(常用)

# ps aux | egrep '(cron|syslog)'

root      2682  0.0  0.0  83384  2000 ?        Sl   Nov02   0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root      2735  0.0  0.0  74812  1140 ?        Ss   Nov02   0:00 crond
root     17475  0.0  0.0  61180   832 pts/0    S+   16:27   0:00 egrep (cron|syslog)


其他实例:

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

命令:ps -aux |more

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

命令:ps -aux > ps001.txt

  • 输出指定的字段
# ps -o pid,ppid,pgrp,session,tpgid,comm

PID   PPID  PGRP  SESS  TPGID COMMAND
17398 17394 17398 17398 17478 bash
17478 17398 17478 17398 17478 ps
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值