linux命令ps a -1,Linux命令之ps详解

本文详细介绍了ps命令的基础用法、不同选项如-aux、-ef、-p及grep的结合,展示了如何查看进程状态、用户信息、资源占用等,并深入解析了僵尸进程和进程生命周期。此外,还讲解了pstree命令用于树状展示进程关系。

ps [选项]

报告当前进程状态。ps显示有关选择的活动进程的信息。如果要重复更新选择和显示的信息,请使用top。ps命令可以搭配kill随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些正在运行和运行的状态、进程是否结束、进程有没有僵死、呢些进程占用了过多的资源等等,总之大部分信息都是可以通过执行该命令得到的。

进程是已启动的可执行程序的运行实例。

(1).常用选项

-A 显示所有进程

-e 显示所有进程,和-A一样

-f 完整格式显示

-u userlist 显示指定用户的进程信息,userlist必须是有效用户ID或名称

u 基于用户的格式显示

-a 显示除会话引导程序和与终端无关的进程之外所的所有进程

a 显示具有终端 (tty)的所有进程,或与x选项一起使用时显示所有进程

x 显示当前用户(有效用户ID)所拥有的进程,类似EUID,或与a选项一起使用时,显示所有进程

-H 显示进程层次结构(树状)

-j BDSM作业控制格式

j 作业格式

最常用的应该就是ps aux或ps -ef。ps aux表示用BSD格式显示进程,ps -ef表示用标准格式显示进程。

(2).实例

1)显示所有进程

[[email protected] 桌面]# ps -e | more -20    //more后面不加数值则会自动填满屏幕,键是一行,是一页

PID TTY TIME CMD

1 ? 00:00:02 init

2 ? 00:00:00 kthreadd

3 ? 00:00:00 migration/0

4 ? 00:00:00 ksoftirqd/0

5 ? 00:00:00 stopper/0

6 ? 00:00:00 watchdog/0

7 ? 00:00:00 migration/1

8 ? 00:00:00 stopper/1

9 ? 00:00:00 ksoftirqd/1

10 ? 00:00:00 watchdog/1

11 ? 00:00:09 events/0

12 ? 00:00:01 events/1

13 ? 00:00:00 events/0

14 ? 00:00:00 events/1

15 ? 00:00:00 events_long/0

16 ? 00:00:00 events_long/1

17 ? 00:00:00 events_power_ef

18 ? 00:00:00 events_power_ef

19 ? 00:00:00 cgroup

--More--

2)显示指定用户的进程信息

[[email protected] 桌面]# ps -u root | more -10

PID TTY TIME CMD

1 ? 00:00:02 init

2 ? 00:00:00 kthreadd

3 ? 00:00:00 migration/0

4 ? 00:00:00 ksoftirqd/0

5 ? 00:00:00 stopper/0

6 ? 00:00:00 watchdog/0

7 ? 00:00:00 migration/1

8 ? 00:00:00 stopper/1

9 ? 00:00:00 ksoftirqd/1

--More--

3)ps a和ps -a的区别

[[email protected] 桌面]# ps a

PID TTY STAT TIME COMMAND

2013 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2

2020 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3

2030 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4

2033 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5

2035 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6

2053 tty1 Ssl+ 2:26 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/ru

4428 pts/1 Ss 0:00 /bin/bash

4438 pts/1 T 0:00 more -10

4449 pts/1 R+ 0:00 ps a

[[email protected] 桌面]# ps –a

PID TTY TIME CMD

4438 pts/1 00:00:00 more

4450 pts/1 00:00:00 ps

4)显示所有进程包括命令行

[[email protected] 桌面]# ps -ef | more -10

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 14:10 ? 00:00:02 /sbin/init

root 2 0 0 14:10 ? 00:00:00 [kthreadd]

root 3 2 0 14:10 ? 00:00:00 [migration/0]

root 4 2 0 14:10 ? 00:00:00 [ksoftirqd/0]

root 5 2 0 14:10 ? 00:00:00 [stopper/0]

root 6 2 0 14:10 ? 00:00:00 [watchdog/0]

root 7 2 0 14:10 ? 00:00:00 [migration/1]

root 8 2 0 14:10 ? 00:00:00 [stopper/1]

root 9 2 0 14:10 ? 00:00:00 [ksoftirqd/1]

--More--

说明:

UID 程序被该 UID 所拥有

PID 就是这个程序的 ID !

PPID 则是其上级父程序的ID

C CPU 使用的资源百分比

STIME 进程启动的系统时间

TTY 登入者的终端机位置。如果显示?表示与终端无关,一般是内核进程。tty1~tty6是本机上登入者程序;pts/0等表示运行在虚拟终端上的进程。

TIME 使用掉的 CPU 时间。

CMD 所下达的指令为何

5)ps和grep结合起来查找进程

[[email protected] 桌面]# ps -ef|more -5

UID PID PPID C STIME TTY TIME CMD

root 1 0 0 14:10 ? 00:00:02 /sbin/init

root 2 0 0 14:10 ? 00:00:00 [kthreadd]

root 3 2 0 14:10 ? 00:00:00 [migration/0]

root 4 2 0 14:10 ? 00:00:00 [ksoftirqd/0]

--More—

[2]+ Stopped ps -ef | more -5

[[email protected] 桌面]# ps -ef |grep ksoftirqd/0

root 4 2 0 14:10 ? 00:00:00 [ksoftirqd/0]

root 4534 4484 0 18:54 pts/0 00:00:00 grep ksoftirqd/0

6)将目前属于您这次登录的PID与相关信息列出来

[[email protected] 桌面]# ps –l

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

4 S 0 4568 4566 0 80 0 - 27087 wait pts/0 00:00:00 bash

4 R 0 4578 4568 0 80 0 - 27035 - 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。

7)显示进程间的关系

[[email protected] 桌面]# ps f

PID TTY STAT TIME COMMAND

4568 pts/0 Ss 0:00 /bin/bash

4630 pts/0 R+ 0:00 \_ ps f

2053 tty1 Ssl+ 2:48 /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/ru

2035 tty6 Ss+ 0:00 /sbin/mingetty /dev/tty6

2033 tty5 Ss+ 0:00 /sbin/mingetty /dev/tty5

2030 tty4 Ss+ 0:00 /sbin/mingetty /dev/tty4

2020 tty3 Ss+ 0:00 /sbin/mingetty /dev/tty3

2013 tty2 Ss+ 0:00 /sbin/mingetty /dev/tty2

8)列出目前所有正在内存中的程序

[[email protected] 桌面]# ps aux | more -10

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

root 1 0.0 0.0 19352 1552 ? Ss 14:10 0:02 /sbin/init

root 2 0.0 0.0 0 0 ? S 14:10 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S 14:10 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S 14:10 0:00 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S 14:10 0:00 [stopper/0]

root 6 0.0 0.0 0 0 ? S 14:10 0:00 [watchdog/0]

root 7 0.0 0.0 0 0 ? S 14:10 0:00 [migration/1]

root 8 0.0 0.0 0 0 ? S 14:10 0:00 [stopper/1]

root 9 0.0 0.0 0 0 ? S 14:10 0:00 [ksoftirqd/1]

--More--

说明:

USER:该 process 属于哪一个个使用者账号的

PID :该 process 的号码

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

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

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

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

TTY :该 process 是在那个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。

STAT:该程序目前的状态,Linux进程有5个基本状态

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

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

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

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

D :该程序不可中断

5个基本状态后还可以跟随一些其他状态,如下:

START:该 process 被触发启动的时间

TIME :该 process 实际使用 CPU 运作的时间,单位秒

COMMAND:该程序的实际指令

9)列出类似程序树的程序显示

[[email protected] 桌面]# ps -axjf | more -10

Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ

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 \_ [migration/0]

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

2 5 0 0 ? -1 S 0 0:00 \_ [stopper/0]

2 6 0 0 ? -1 S 0 0:00 \_ [watchdog/0]

2 7 0 0 ? -1 S 0 0:00 \_ [migration/1]

2 8 0 0 ? -1 S 0 0:00 \_ [stopper/1]

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

2 10 0 0 ? -1 S 0 0:00 \_ [watchdog/1]

--More--

(3).扩展

进程的生命周期:

fff6c98081bf8904098fb5e1bd59ff4b.gif

描述如下:

父进程复制自己的地址空间(fork分叉)创建一个新的(子)进程结构。每个新的进程分配一个唯一的进程ID(PID),满足跟踪安全性需求。PID和父进程ID(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

CentOS5或CentOS6的PID为1的进程是init。CentOS7的PID为1的进程是systemd。

1)什么是僵尸进程

一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

通俗来讲就是父进程退出,而子进程没有退出,那么这些子进程没有父进程来管理,就变成了僵尸进程。

2)进程的属性

进程ID(PID),是唯一的数值,用来区分进程

父进程ID(PPID)

启动进程的用户ID(UID)和所属组(GID)

进程状态,运行R、休眠S、僵尸Z

进程执行的优先级

进程所连接的终端名

进程资源占用,比如占用资源大小(内存、CPU占用量)

(4).扩展pstree命令

pstree [选项] [PID或用户名]

以树状图显示进程,默认情况下只显示进程的名字,且相同进程合并显示。很少使用。

在没有任何参数的情况下,默认显示如下

[[email protected] ~]$ pstree | more -10

systemd-+-ModemManager---2*[{ModemManager}]

|-NetworkManager-+-dhclient

| `-2*[{NetworkManager}]

|-VGAuthService

|-abrt-dbus---2*[{abrt-dbus}]

|-2*[abrt-watch-log]

|-abrtd

|-accounts-daemon---2*[{accounts-daemon}]

|-alsactl

|-anacron

--More--

如果想要PID,可以使用选项-p

[[email protected] ~]$ pstree -p | more -10

systemd(1)-+-ModemManager(6833)-+-{ModemManager}(6858)

| `-{ModemManager}(6877)

|-NetworkManager(6988)-+-dhclient(7291)

| |-{NetworkManager}(6995)

| `-{NetworkManager}(6998)

|-VGAuthService(6831)

|-abrt-dbus(9962)-+-{abrt-dbus}(9963)

| `-{abrt-dbus}(9965)

|-abrt-watch-log(6848)

|-abrt-watch-log(6887)

--More--

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值