linux ps
查看它的man手册可以看到,ps命令能够给出当前系统中进程的快照。它能捕获系统在某一事件的进程状态。如果你想不断更新查看的这个状态,可以使用top命令。
ps命令支持三种使用的语法格式
-
UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
-
BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
-
GNU 风格的长选项,选项前有两个“-”连字符
我们能够混用这几种风格,但是可能会发生冲突。本文使用 UNIX 风格的ps命令。
这里有在日常生活中使用较多的ps命令的例子。
对应语法查询
$ man ps
常见例子
查看 java 进程
这样可以查看对应的 java 进程
$ ps -ef | grep java
dh 454 357 0 09:04 pts/0 00:00:00 grep --color=auto java
ps -ef | grep java
是一条用于在 Linux 系统上查找与 Java 相关的进程的命令。
让我们详细解释每个部分:
-
ps
: 这是一个用于显示当前进程状态的命令。它的名称来自于 “process status” 的缩写。 -ef
: 这是ps
命令的选项,指定显示所有进程的详细信息。具体含义如下:-e
选项表示显示所有进程。-f
选项表示显示详细的进程信息,包括进程的 UID(用户标识符)、PID(进程标识符)、PPID(父进程标识符)、C(CPU 使用率)、STIME(进程启动时间)等。
-
|
: 这是管道符,它将ps -ef
的输出传递给下一个命令。 grep java
: 这是一个用于搜索包含 “java” 字符串的行的命令。grep
是一个强大的文本搜索工具。
综合起来,ps -ef | grep java
的目的是列出所有正在运行的进程,并使用 grep
过滤出包含 “java” 字符串的那些行。
这样做的结果是显示所有与 Java 相关的进程。
例如,如果你运行了一个 Java 应用程序,你可能会看到类似以下的输出:
user 1234 4567 0 Dec25 pts/0 00:00:00 java -jar myapp.jar
这表示有一个进程 ID 为 1234 的 Java 进程,它是由进程 ID 为 4567 的父进程启动的,命令行是 java -jar myapp.jar
。
无参数
$ ps
PID TTY TIME CMD
15599 pts/0 00:00:00 bash
15623 pts/0 00:00:00 ps
结果默认会显示4列信息。
PID: 运行着的命令(CMD)的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的CPU处理时间
CMD: 该进程所运行的命令
这些信息在显示时未排序
根据某个属性排序
根据 CPU 使用来升序排序
$ ps -aux --sort -pcpu | less
ef 与 aux 区别
ef
$ ps -ef | grep XXXX
ps -ef 是用标准的格式显示进程的
其中各列的内容意思如下 UID //用户ID、但输出的是用户名 PID //进程的ID PPID //父进程ID C //进程占用CPU的百分比 STIME //进程启动到现在的时间 TTY //该进程在那个终端上运行,若与终端无关,则显示? 若为pts/0等,则表示由网络连接主机进程。 CMD //命令的名称和参数\
aux
ps aux 是用BSD的格式来显示、其格式如下
同ps -ef 不同的有列有 USER //用户名 %CPU //进程占用的CPU百分比 %MEM //占用内存的百分比 VSZ //该进程使用的虚拟內存量(KB) RSS //该进程占用的固定內存量(KB)(驻留中页的数量) STAT //进程的状态 START //该进程被触发启动时间 TIME //该进程实际使用CPU运行的时间
其中STAT状态位常见的状态字符有
D //无法中断的休眠状态(通常 IO 的进程);
R //正在运行可中在队列中可过行的;
S //处于休眠状态;
T //停止或被追踪;
W //进入内存交换 (从内核2.6开始无效);
X //死掉的进程 (基本很少见);
Z //僵尸进程;
< //优先级高的进程
N //优先级较低的进程
L //有些页被锁进内存;
s //进程的领导者(在它之下有子进程);
l //多线程,克隆线程(使用 CLONE_THREAD, 类似 NPTL pthreads);
+
//位于后台的进程组;