概述
jps 命令類似與 linux 的 ps 命令,但是它只列出系統中所有的 Java 應用程序。 通過 jps 命令可以方便地查看 Java 進程的啟動類、傳入參數和 Java 虛擬機參數等信息。
如果在 linux 中想查看 java 的進程,一般我們都需要 ps -ef | grep java 來獲取進程 ID。
如果只想獲取 Java 程序的進程,可以直接使用 jps 命令來直接查看。
jps 用法

參數說明
-q:只輸出進程 ID
-m:輸出傳入 main 方法的參數
-l:輸出完全的包名,應用主類名,jar的完全路徑名
-v:輸出jvm參數
-V:輸出通過flag文件傳遞到JVM中的參數
[hostid]:遠程服務器地址,jps 支持遠程調用 [protocol:][[//]hostname][:port][/servername]
示例一:jps
無參數:顯示進程的ID 和 類的名稱

jps 不帶參數,默認顯示 進程ID 和 啟動類的名稱。
示例二:jps -q
參數 -q 只輸出進程ID,而不顯示出類的名稱

示例三:jps -m
參數 -m 可以輸出傳遞給 Java 進程(main 方法)的參數。

示例四:jps -l
參數 -l 可以輸出主函數的完整路徑(類的全路徑)。

示例五:jps -v
參數 -v 可以顯示傳遞給 Java 虛擬機的參數。

獲取遠程服務器 jps 信息
jps 支持查看遠程服務上的 jvm 進程信息。如果需要查看其他機器上的 jvm 進程,需要在待查看機器上啟動 jstatd 服務。
開啟 jstatd 服務
啟動 jstatd 服務,需要有足夠的權限。 需要使用 Java 的安全策略分配相應的權限。
創建 jstatd.all.policy 策略文件。
grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };
啟動 jstatd 服務器
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.31.241
-J 參數是一個公共的參數,如 jps、 jstat 等命令都可以接收這個參數。 由於 jps、 jstat 命令本身也是 Java 應用程序, -J 參數可以為 jps 等命令本身設置 Java 虛擬機參數。
-Djava.security.policy:指定策略文件
-Djava.rmi.server.hostname:指定服務器的ip地址(可忽略)
默認情況下, jstatd 開啟在 1099 端口上開啟 RMI 服務器。

jps 原理
java程序在啟動以后,會在java.io.tmpdir指定的目錄下,就是臨時文件夾里,生成一個類似於hsperfdata_User的文件夾,這個文件夾里(在Linux中為/tmp/hsperfdata_{userName}/),有幾個文件,名字就是java進程的pid,因此列出當前運行的java進程,只是把這個目錄里的文件名列一下而已。 至於系統的參數什么,就可以解析這幾個文件獲得。
window系統顯示如下:

從文件中可以看出 1864、4296、12600 跟上面的 jps 命令輸出的進程 ID 一致。
作者:jijs
鏈接:https://www.jianshu.com/p/d39b2e208e72
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。