前言:虽然 ps -ef 与 ps aux 命令都能查看进程运行情况,但两者之间还是有一些细致区别。
一、格式与输出
1、ps -ef/ps -Af:
-e是显示所有进程,包括其他用户的进程。-A属于-e别名,功能相同。
-f :显示更多的列信息,例如UID、PID、PPID、C、STIME、TTY、TIME和CMD
输出示例:
UID PID PPID C STIME TTY TIME CMD
root 2183 1 1 16:06 ? 00:01:03 java -jar example.jar
2、ps -aux:
a:显示所有用户进程,包括其它用户进程。
u:以用户为主的格式显示,包含用户名和CPU、内存使用率信息。
x:显示没有控制终端的进程(如后台进程)
输出示例:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 2183 1.0 0.5 123456 7890 ? Ssl 16:06 0:01 java -jar example.jar
二、列内容区别
1、在 ps -ef 中,可以看到PPID列,它可以更好的帮助我们了解父子进程。
2、在 ps aux 中, 包含了%CPU和%MEM列,它可以更好地帮助我们更直观的监控内容信息。
三、使用场景区别
1、ps -ef :查看所有进程及其详细信息,并显示父进程 ID。
2、ps aux:重点在资源使用情况,像CPU和内存的占用率等等。
四、为什么两个命令中都有 “| grep”?
答:
1、 “|” 我们称为管道符。它的作用是在 Unix/Linux中将一个命令的输出连接到另一个命令的输出。通过管道符,我们可以连接多个命令,让数据在它们之间传递。
2、“grep” 的作用是过滤是 “java” 的相关进程。
举个例子:
假设我们有以下命令:echo -e "apple\nbanana\ncherry" | grep "an"
分析一下其中的意思:
①echo -e "apple\banana\ncherry" 会输出三个文本,分别是“apple”、“banana”、“ncherry”
②“|” 会将输出结果传递给 grep 命令
③grep "an" 会筛选出包含 “an” 的结果
即最终输出结果为:banana 。
可以看到,grep 命令 相当于SQL中的模糊查询。