hadoop@abp-oggdb-002:/home/hadoop/app/hadoop>which jps
/usr/java/jdk1.7.0_80/bin/jps
所以此命令是有java而来,显示的是java程序
不同用户呈现的不同结果:
hadoop@abp-oggdb-002:/home/hadoop/app/hadoop>jps
73245 NameNode
92424 Jps
73627 SecondaryNameNode
73400 DataNode
root@abp-oggdb-002:/root#/usr/java/jdk1.7.0_80/bin/jps
73245 – process information unavailable
92482 Jps
73627 – process information unavailable
73400 – process information unavailable
oracle@abp-oggdb-002:/oracle>/usr/java/jdk1.7.0_80/bin/jps
92581 Jps
可以得出
- jps只有在java程序所属用户下,才能够进行正确的显示出,进程号 和 进行名
- root用户是super用户,也能够调用出其他用户的jps,单数显示结果为 process information unavailable
- 以root用户 kill 进程看看结果
root@abp-oggdb-002:/root#/usr/java/jdk1.7.0_80/bin/jps
73245 – process information unavailable
92698 Jps
73627 – process information unavailable
73400 – process information unavailable
root@abp-oggdb-002:/root#
root@abp-oggdb-002:/root#kill -9 73245
hadoop@abp-oggdb-002:/home/hadoop>jps
92797 Jps
73627 SecondaryNameNode
73400 DataNode
hadoop@abp-oggdb-002:/home/hadoop>ps -ef|grep NameNode
hadoop 73627 1 0 11:19 ? 00:00:15 /usr/java/jdk1.7.0_80/bin/java -Dproc_secondarynamenode
发现: root是超级用户,进行kill 肯定消失
- 以所属用户。kill进程
进程必然会掉 jps 只是一个显示进程的命令,kill进行肯定掉
- 删除/tmp/hsperfdata_hadoop下面的进程号,看看什么结果
hadoop@abp-oggdb-002:/tmp/hsperfdata_hadoop>ll
-rw------- 1 hadoop hadoop 32768 9月 28 14:34 73627
-rw------- 1 hadoop hadoop 32768 9月 28 14:34 93096
-rw------- 1 hadoop hadoop 32768 9月 28 14:34 93973
hadoop@abp-oggdb-002:/tmp/hsperfdata_hadoop>jps
93096 NameNode
94419 Jps
93973 DataNode
73627 SecondaryNameNode
hadoop@abp-oggdb-002:/tmp/hsperfdata_hadoop>rm -rf 93973
hadoop@abp-oggdb-002:/tmp/hsperfdata_hadoop>jps
94468 Jps
93096 NameNode
73627 SecondaryNameNode
hadoop@abp-oggdb-002:/tmp/hsperfdata_hadoop>ps -ef|grep DataNode
hadoop 93973 1 4 14:34 ? 00:00:05 /usr/java/jdk1.7.0_80/bin/java -Dproc_datanode -Xmx1000m -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/home/hadoop/app/hadoop/logs -Dhadoop.log.file=hadoop.log -Dhadoop.home.dir=/home/hadoop/app/hadoop -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,console -Djava.library.path=/home/hadoop/app/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Stack=true -Dhadoop.log.dir=/home/hadoop/app/hadoop/logs -Dhadoop.log.file=hadoop-hadoop-datanode-abp-oggdb-002.log -Dhadoop.home.dir=/home/hadoop/app/hadoop -Dhadoop.id.str=hadoop -Dhadoop.root.logger=INFO,RFA -Djava.library.path=/home/hadoop/app/hadoop/lib/native -Dhadoop.policy.file=hadoop-policy.xml -Djava.net.preferIPv4Stack=true -server -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=ERROR,RFAS -Dhadoop.security.logger=INFO,RFAS org.apache.hadoop.hdfs.server.datanode.DataNode
hadoop 94509 93649 0 14:35 pts/0 00:00:00 grep --color=auto DataNode
结论: rm 删除之后,jps 就不现实该进程号了。 但是 程序还在, 不影响java程序的正常使用,可以使用 ps -ef|grep xx 进行查看
综上所述:
- 查看哪个用户的java程序,就在哪个所属用户下执行 jps
- jps 显示的结果不一定代表程序不存在,需要结合ps -ef|grep 进程名 进行查看