文章目录
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 10.00.01919325000? Ss 202246:32/usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 20.00.000? S 20220:04[kthreadd]
root 30.00.000? S 20224:19[ksoftirqd/0]
root 50.00.000? S 20220:00[kworker/0:0H]
root 70.00.000? S 20220:48[migration/0]
root 100.00.000? S<20220:00[lru-add-drain]
root 110.00.000? S 20220: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 1002022?00:46:32/usr/lib/systemd/systemd --switched-root --system --deserialize 21
root 2002022?00:00:04[kthreadd]
root 3202022?00:04:19[ksoftirqd/0]
root 5202022?00:00:00[kworker/0:0H]
root 7202022?00:00:48[migration/0]
root 10202022?00:00:00[lru-add-drain]
root 11202022?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 0100800-47983 ep_pol ?00:46:32 systemd
1 S 0200800-0 kthrea ?00:00:04 kthreadd
1 S 0320800-0 smpboo ?00:04:19 ksoftirqd/05 S 0520800-0 worker ?00:00:00 kworker/0:0H
1 S 0720-40--0 smpboo ?00:00:48 migration/01 S 0820800-0 rcu_gp ?00:00:00 rcu_bh
1 S 0920800-0 rcu_gp ?00:58:12 rcu_sched
5 S 0102060-20-0 rescue ?00:00:00 lru-add-drain
5 S 01120-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 018618186140800-1681- pts/100:00:00 bash
4 R 018683186184800-1619- pts/100: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就是要查找的进程所在路径
版权归原作者 云川之下 所有, 如有侵权,请联系我们删除。