格式: ps -ef | grep 查找信息
ps: 將某個進程顯示出來
grep:(Global Regular Expression Print)查找的意思,使用的權限是所有的用戶,它是一種強大的文本搜索工具,能使用正則表達式搜索文本,並把匹配的行打印出來
|:管道命名,指的是 ps 命令和 grep 命令同時執行(可以把它看做是一個連接的作用)
-e:顯示所有進程
-f:全格式
比如:
//以下這條命令是檢查 java 進程是否存在:ps -ef |grep java [root@localhost ~]# ps -ef|grep java UID PID PPID C STIME TTY TIME CMD root 3121 2902 0 12:13 pts/5 00:00:00 grep --color=auto java root 3206 1 0 Apr07 ? 00:05:46 /home/java/jdk1.8.0_221/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/apache-tomcat-8.5.45-jenkins/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/apache-tomcat-8.5.45-jenkins/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-8.5.45-jenkins/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat/apache-tomcat-8.5.45-jenkins -Dcatalina.home=/usr/local/tomcat/apache-tomcat-8.5.45-jenkins -Djava.io.tmpdir=/usr/local/tomcat/apache-tomcat-8.5.45-jenkins/temp org.apache.catalina.startup.Bootstrap start
//以下這條命令是檢查 redis 進程是否存在:ps -ef |grep redis [root@localhost ~]# ps -ef | grep redis root 6282 2761 0 20:15 pts/0 00:00:13 redis-server *:6379 root 9519 9142 0 20:48 pts/3 00:00:00 grep --color=auto redis
1. 具體的字段含義如下:
UID:用戶ID,指的是程序被該UID所擁有,但輸出的是用戶名,比如上述輸出的是root 用戶
PID:進程的ID,該程序的ID
PPID:父進程ID,上級父程序的ID
C:該進程占用CPU的百分比
STIME:進程啟動到現在的時間
TTY:登入者的終端機位置,該進程在哪個終端上運行,若與終端無關,則顯示? 若為pts/0等,則表示由網絡連接主機進程。
TIME:使用掉的CPU時間
CMD:啟動進程的命令和參數
2. grep進程本身
通常在使用 ps命令后 用管道連接 查詢特定進程會顯示 grep進程本身。比如以下截圖中的第三行,后綴一般是:grep --color=auto XXX
有時候查詢結果其實 都是沒有對應這個進程。但是會顯示了 grep進程的本身,有的人會認為這就是自己想要的 進程,結果用 kill -9 PID 時提示進程號不存在.......
如何判斷該進程是否是 grep進程本身? 看下方指令,你就會明白了。
進程號一直的變的那個進程是 grep進程本身(橙色標注)5344 -->5384 --> 5422
正常進程號,比如redis的PID不會變。(綠色標注)9717 -->9717 -->9717
[root@localhost app]# ps -ef | grep redis root 5344 9142 0 12:45 pts/3 00:00:00 grep --color=auto redis root 9717 1 0 Apr07 ? 00:00:57 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379 [root@localhost app]# ps -ef | grep redis root 5384 9142 0 12:45 pts/3 00:00:00 grep --color=auto redis root 9717 1 0 Apr07 ? 00:00:57 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379 [root@localhost app]# ps -ef | grep redis root 5422 9142 0 12:45 pts/3 00:00:00 grep --color=auto redis root 9717 1 0 Apr07 ? 00:00:57 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379
3. 如何過濾掉grep進程本身的輸出:
方法 一:在進程名 任何一個字母上添加 [ ]
[root@localhost app]# ps -ef | grep redis root 6079 9142 0 12:55 pts/3 00:00:00 grep --color=auto redis root 9717 1 0 Apr07 ? 00:00:57 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379
[root@localhost app]# ps -ef | grep [r]edis root 9717 1 0 Apr07 ? 00:00:57 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379
因為字母加上 [ ] 后,
此時 grep進程的參數是 grep --color=auto [r]edis(注意看和上方代碼框中深藍標記的區別!!!)
而 grep [r]edis 正則表達式 匹配的是 'redis' 這個字符串,
因此這個 grep [r]edis 正則表達式 並不能匹配到 ' [r]edis' 這個字符串。(也就是grep的進程)
所以自然不會出現grep進程本身。
方法二: 在進程 后面 加 | grep -v grep
-v 參數含義為:不包括
[root@localhost app]# ps -ef | grep redis root 6676 9142 0 13:02 pts/3 00:00:00 grep --color=auto redis root 9717 1 0 Apr07 ? 00:00:58 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379 [root@localhost app]# ps -ef | grep redis | grep -v grep root 9717 1 0 Apr07 ? 00:00:58 /usr/local/redis/redis-4.0.6/bin/redis-server 10.10.1.132:6379