Linux运维03:ps命令详解
Posted YoungerChina
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux运维03:ps命令详解相关的知识,希望对你有一定的参考价值。
系列专题:Linux运维入门教程
Linux系统中会运行各种各样的进程,如果要对进程进行监控,首先必须了解当前进程的情况,也就是需要查看当前进程。ps命令就是最基本的进程查看命令,使用该命令可以看到有哪些进程正在运行,并且可以看到进程的运行状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到。ps是显示瞬间进程的状态,并不动态连续,如果想对进程进行实时监控应该用top命令。
1 用法
格式:
ps [options]
参数说明
选项 | 功能 |
-A | 显示所有的进程,跟-e的效果相同 |
-a | 显示现行终端机下的所有进程,包括其他用户的进程 |
-u | 显示当前用户的进程状态 |
-x | 通常与 a 这个参数一起使用,可列出较完整信息 |
-l | 较长、较详细的将该PID的信息列出 |
-j | 工作的格式(jobs format) |
-f | 把进程的所有信息都显示出来 |
-e | 表示显示所有继承 |
2. 实践
2.1 查看系统所有进程
[root@devvm ~]# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 193952 7068 ? Ss 01:43 0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S 01:43 0:00 [kthreadd]
root 4 0.0 0.0 0 0 ? S< 01:43 0:00 [kworker/0:0H]
root 6 0.0 0.0 0 0 ? S 01:43 0:00 [ksoftirqd/0]
root 7 0.0 0.0 0 0 ? S 01:43 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S 01:43 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? S 01:43 0:01 [rcu_sched]
root 10 0.0 0.0 0 0 ? S< 01:43 0:00 [lru-add-drain]
root 11 0.0 0.0 0 0 ? S 01:43 0:00 [watchdog/0]
root 12 0.0 0.0 0 0 ? S 01:43 0:00 [watchdog/1]
root 13 0.0 0.0 0 0 ? S 01:43 0:00 [migration/1]
root 14 0.0 0.0 0 0 ? S 01:43 0:00 [ksoftirqd/1]
root 16 0.0 0.0 0 0 ? S< 01:43 0:00 [kworker/1:0H]
字段说明:
- USER:表示该进程属于哪个用户
- PID:进程id
- %CPU:该进程占用CPU资源的百分比
- %MEM:该进程占用内存的百分比
- VSZ:该进程使用掉的虚拟内存量 (Kbytes)
- RSS:该进程占用的固定的内存量 (Kbytes)
- TTY:该进程是在那个终端机上面运行,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- STAT:代表该进程目前的状态,主要的状态有:
- R:该进程正在运行
- S:该进程正在休眠,但可被某些信号(signal)唤醒
- D:无法中断的休眠状态(通常为IO进程)
- T:该进程已经停止
- Z:僵死状态,该进程应该已经终止,但是其父进程却无法正常的终止它,造成zombie(疆尸)程序的状态
- W:等待状态,等待内存的分配
- <:高优先级的进程
- N:低优先级的进程
- START:该进程被触发启动的时间
- COMMAND:该进程的实际指令
ps -aux默认是无序的,可以通过--sort命令来排序,如:按照cpu或内存占用来降序排序:
ps -aux --sort -pcpu|less -N #按照cpu占用来排序
或
ps -aux --sort -pmem|less -N #按照内存占用来排序
查看指定进程,如查看netns进程:
[root@devvm ~]# ps -aux | grep netns
root 49 0.0 0.0 0 0 ? S< 01:43 0:00 [netns]
root 3236 0.0 0.0 112812 968 pts/0 S+ 23:43 0:00 grep --color=auto netns
[root@devvm ~]#
2.2 使用ps命令实时查看进程
ps 命令会显示系统当前的进程状态,但是这个结果是静态的。如果想要使用ps命令来实时查看进程状态,并且通过CPU和内存用量来对结果进行排序,并且希望结果能够每秒刷新1次,我们可以把ps命令和watch命令结合起来使用。
watch -n 1 'ps -aux --sort -pcpu,+pmem | head -6'
执行上述命令之后,结果如下图,这个结果会每秒刷新1次。解释一下这个命令:ps -aux会显示所有的进程,--sort -pcpu,+pmem 会使用CPU、内存来排序,head -6会显示前6行数据,即只看前5个进程情况,通过watch命令来做到每秒更新。
2.3 查看当前用户的进程
[root@devvm ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 3026 3022 0 80 0 - 28886 do_wai pts/0 00:00:00 bash
0 R 0 3239 3026 0 80 0 - 38331 - pts/0 00:00:00 ps
各个字段含义为:
- F:代表这个进程的flag,如果是4,则代表使用者为 super user
- S:代表这个进程的状态stat
- UID:代表执行者的userId
- PID:进程的id
- PPID:父进程的id
- C:占用CPU资源的百分比
- PRI:指进程的执行优先级(Priority的简写),其值越小越早被执行
- NI:代表进程的nice值,其表示进程可被执行的优先级的修正数值
- ADDR:代表进程的地址,它指出该进程在内存的哪个部分,如果是个正在运行的程序,一般都是"-"
- SZ:占用的内存大小
- WCHAN:判断当前进程是否正在运行,若为"-",则代表正在运行;若该进程处于休眠状态,该值就是它在内核中的地址
- TTY:该进程是在那个终端机上面运行,若与终端机无关,则显示?,另外,tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。
- TIME:占用CPU的时间
- CMD:所下达的指令名称
3 杀死进程
都知道杀死一个进程,可以使用kill命令,而kill和kill -9都可以杀死进程,那么它们到底有什么区别呢?它们的区别如下:
执行kill命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,有以下几种情况:
①程序立即停止
②等程序释放相应的资源后再停止
③程序可能仍然继续运行
大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如正在等待IO的进程),也就是说,SIGTERM多半是会被阻塞的。
而kill -9命令,系统给对应进程发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
除此之外,还可以通过进程名来杀死进程,这就需要使用killall命令,如:killall gedit
4 参考资料
[01]https://www.cnblogs.com/baichunyu/p/15346804.html
以上是关于Linux运维03:ps命令详解的主要内容,如果未能解决你的问题,请参考以下文章
精通Linux系列服务器之间的telnet与scp命令用法,进程管理命令之ps -ef与ps aux详解