您现在的位置是:首页 >技术杂谈 >【Linux 】 ps命令详解,查看进程pid网站首页技术杂谈
【Linux 】 ps命令详解,查看进程pid
ps概述
ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。
ps 命令有多种不同的使用方法,这常常给初学者带来困惑。在各种 Linux 论坛上,询问 ps 命令语法的帖子屡见不鲜,而出现这样的情况,还要归咎于 UNIX 悠久的历史和庞大的派系。在不同的 Linux 发行版上,ps 命令的语法各不相同,为此,Linux 采取了一个折中的方法,即融合各种不同的风格,兼顾那些已经习惯了其它系统上使用 ps 命令的用户。
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,条记录,方便查看列头含义
【例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 命令。
我们再来说说僵尸进程。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。
僵尸进程会对主机的稳定性产生影响,所以,在产生僵尸进程后,一定要对产生僵尸进程的软件进行优化,避免一直产生僵尸进程;对于已经产生的僵尸进程,可以在查找出来之后强制中止。
指定pid进行查看
格式 :
ps -p xxx
ps -p xxx -f 更详细的信息