ps 命令是最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息
参数:
a:显示一个终端的所有进程,除会话引线外;
u:显示当前用户进程及内存的使用情况;
x:显示没有控制终端的进程;
l:长格式显示更加详细的信息;
e:显示所有进程;
f:全格式,包括命令行
几个固定参数,比如:
ps -aux:可以查看系统中所有的进程;
ps -le:可以查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;
ps -l:只能看到当前 Shell 产生的进程;
ps -T -p :查看指定进程的所有线程
ps -Lf :查看指定进程的所有线程的详细信息
【例1】查看系统所有进程
shen@ubuntu-vm:~$ ps -aux | head -10
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 168412 10388 ? Ss 12:47 0:01 /sbin/init splash
root 2 0.0 0.0 0 0 ? S 12:47 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 12:47 0:00 [rcu_gp]
root 4 0.0 0.0 0 0 ? I< 12:47 0:00 [rcu_par_gp]
root 5 0.0 0.0 0 0 ? I< 12:47 0:00 [netns]
root 7 0.0 0.0 0 0 ? I< 12:47 0:00 [kworker/0:0H-events_highpri]
root 10 0.0 0.0 0 0 ? I< 12:47 0:00 [mm_percpu_wq]
root 11 0.0 0.0 0 0 ? S 12:47 0:00 [rcu_tasks_rude_]
root 12 0.0 0.0 0 0 ? S 12:47 0:00 [rcu_tasks_trace]
【例2】查看系统所有进程
"ps aux"命令可以看到系统中所有的进程,"ps -le"命令也能看到系统中所有的进程。由于 “-l” 选项的作用,所以 “ps -le” 命令能够看到更加详细的信息,比如父进程的 PID、优先级等。但是这两个命令的基本作用是一致的,掌握其中一个就足够了
shen@ubuntu-vm:~$ ps -le | head -10
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 42103 - ? 00:00:01 systemd
1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
1 I 0 3 2 0 60 -20 - 0 - ? 00:00:00 rcu_gp
1 I 0 4 2 0 60 -20 - 0 - ? 00:00:00 rcu_par_gp
1 I 0 5 2 0 60 -20 - 0 - ? 00:00:00 netns
1 I 0 7 2 0 60 -20 - 0 - ? 00:00:00 kworker/0:0H-events_highpri
1 I 0 10 2 0 60 -20 - 0 - ? 00:00:00 mm_percpu_wq
1 S 0 11 2 0 80 0 - 0 - ? 00:00:00 rcu_tasks_rude_
1 S 0 12 2 0 80 0 - 0 - ? 00:00:00 rcu_tasks_trace
【例 3】如果不想看到所有的进程,只想查看一下当前登录产生了哪些进程,那只需使用 “ps -l”
shen@ubuntu-vm:~$ ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1000 14230 14088 0 80 0 - 3524 do_wai pts/3 00:00:00 bash
0 R 1000 16222 14230 0 80 0 - 3622 - pts/3 00:00:00 ps
可以看到,这次从 pts/3 虚拟终端登录,只产生了两个进程:一个是登录之后生成的 Shell,也就是 bash;另一个是正在执行的 ps 命令。
我们再来说说僵尸进程。僵尸进程的产生一般是由于进程非正常停止或程序编写错误,导致子进程先于父进程结束,而父进程又没有正确地回收子进程,从而造成子进程一直存在于内存当中,这就是僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源