【Linux 】 ps命令详解,查看进程pid

1. ps概述

ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。

ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不同的 Linux 发行版上,ps 命令的语法各不相同,为此,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps 命令的用户。

2. ps语法

ps 命令的基本格式如下:

#查看系统中所有的进程,使用 BS 操作系统格式
[root@localhost ~]# ps aux

#查看系统中所有的进程,使用 Linux 标准命令格式
[root@localhost ~]# ps -les

选项:

  • a:显示一个终端的所有进程,除会话引线外;
  • u:显示进程的归属用户及内存的使用情况;
  • x:显示没有控制终端的进程;
  • -l:长格式显示更加详细的信息;
  • -e:显示所有进程;
  • -f 完整格式显示

可以看到,ps 命令有些与众不同,它的部分选项不能加入"-“,比如命令"ps aux”,其中"aux"是选项,但是前面不能带“-”。

大家如果执行 “man ps” 命令,则会发现 ps 命令的帮助为了适应不同的类 UNIX 系统,可用格式非常多,不方便记忆。所以,我建议大家记忆几个固定选项即可。比如:

  • “ps aux” 可以查看系统中所有的进程;
  • “ps -le” 可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
  • “ps -ef” 同le相似
  • “ps -l” 只能看到当前 Shell 产生的进程;

有这三个命令就足够了,下面分别来查看。

【例 1】ps aux

[root@localhost ~]# ps aux
#查看系统中所有的进程
[root@EMS3 ~]# ps aux|head -n  10
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0 191932  5000 ?        Ss    2022  46:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2  0.0  0.0      0     0 ?        S     2022   0:04 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2022   4:19 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S     2022   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S     2022   0:48 [migration/0]
root        10  0.0  0.0      0     0 ?        S<    2022   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S     2022   0:15 [watchdog/0]
…省略部分输出…

或使用 ps aux |head -n 10 只展示前10,条记录,方便查看列头含义

扫描二维码关注公众号,回复: 16525526 查看本文章

在这里插入图片描述

【例2 】 ps -ef

[root@EMS3 ~]# ps -ef|head -n  10
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0  2022 ?        00:46:32 /usr/lib/systemd/systemd --switched-root --system --deserialize 21
root         2     0  0  2022 ?        00:00:04 [kthreadd]
root         3     2  0  2022 ?        00:04:19 [ksoftirqd/0]
root         5     2  0  2022 ?        00:00:00 [kworker/0:0H]
root         7     2  0  2022 ?        00:00:48 [migration/0]
root        10     2  0  2022 ?        00:00:00 [lru-add-drain]
root        11     2  0  2022 ?        00:00:15 [watchdog/0]

【例3 】 ps -le
"ps aux"命令可以看到系统中所有的进程,"ps -le"命令也能看到系统中所有的进程。由于 “-l” 选项的作用,所以 “ps -le” 命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了。

[root@localhost ~]# ps -le
[root@EMS3 ~]# ps -le|head -n  10
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0     1     0  0  80   0 - 47983 ep_pol ?        00:46:32 systemd
1 S     0     2     0  0  80   0 -     0 kthrea ?        00:00:04 kthreadd
1 S     0     3     2  0  80   0 -     0 smpboo ?        00:04:19 ksoftirqd/0
5 S     0     5     2  0  80   0 -     0 worker ?        00:00:00 kworker/0:0H
1 S     0     7     2  0 -40   - -     0 smpboo ?        00:00:48 migration/0
1 S     0     8     2  0  80   0 -     0 rcu_gp ?        00:00:00 rcu_bh
1 S     0     9     2  0  80   0 -     0 rcu_gp ?        00:58:12 rcu_sched
5 S     0    10     2  0  60 -20 -     0 rescue ?        00:00:00 lru-add-drain
5 S     0    11     2  0 -40   - -     0 smpboo ?        00:00:15 watchdog/0
…省略部分输出…

或使用 ps -ef |head -n 10 只展示前10,条记录,方便查看列头含义
在这里插入图片描述
【例 4】如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 “ps -l” 命令就足够了:

[root@localhost ~]# ps -l
#查看当前登录产生的进程
F S UID   PID  PPID C PRI NI ADDR SZ WCHAN TTY       TIME CMD
4 S 0   18618 18614 0  80  0 - 1681  -     pts/1 00:00:00 bash
4 R 0   18683 18618 4  80  0 - 1619  -     pts/1 00:00:00 ps

可以看到,这次从 pts/1 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。

我们再来说说僵尸进程。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。

僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。

3. 指定pid进行查看

格式 :
ps -p xxx
ps -p xxx -f 更详细的信息

4. 查看进程启动路径

#查看tomcat进程
ps -ef | grep tomcat

单个进程启动之后会在 /proc下面有一个pid对应的路径
如PID为1521,到/proc/1521下,ls -l会看到类似如下信息:

-r--r--r--    1 oracle   oinstall        0 12月 29 18:58 cmdline
lrwxrwxrwx    1 oracle   oinstall        0 12月 29 18:58 cwd -> /XXX/ultserver_aa
-r--------    1 oracle   oinstall        0 12月 29 18:58 environ

cwd就是要查找的进程所在路径

猜你喜欢

转载自blog.csdn.net/m0_45406092/article/details/130661189