Bash
在 bash 腳本中查找 java 應用程序的程序 id(以查看目標應用程序是否已在執行)
我知道在獲取程序 ID 時有一百萬個問題,但這個問題似乎是獨一無二的。Google沒有給我答案,所以我希望 stackexhange 能幫助而不是結束這個問題。
當涉及 Java 時,查找程序 ID 似乎更棘手(pgrep 不起作用 afaik)。
此外,我需要在 bash 腳本中自動執行此操作。我遇到的一個問題是,當我使用
ps aux | grep
grep 程序本身時,總是會出現,因此在一個簡單的 bash 腳本中處理結果對於我自己找出一個好的解決方案來說並不簡單(以我有限的 bash 技能) .我嘗試過的一些事情:
範例 1 - 即使沒有該名稱的應用程序,這也會返回一個程序:
$ ps aux | grep -i anythingnotreal user2 3040 0.0 0.0 4640 856 pts/3 S+ 18:17 0:00 grep --color=auto -i anythingnotreal
範例 2 - 即使“java_app”目前正在執行,也不會返回任何內容:
$ pgrep java_app
它什麼也不返回。但是,這是“java_app”正在執行的證據:
$ ps aux | grep java_app tester2 2880 0.7 2.8 733196 58444 ? Sl 18:02 0:07 java -jar /opt/java_app2/my_java_app.jar tester2 3058 0.0 0.0 4644 844 pts/3 S+ 18:19 0:00 grep --color=auto java_app
我需要的是一個解決方案,我可以插入一個 bash 腳本,它會告訴我感興趣的 java 應用程序(我知道它的 jar 文件名和路徑)目前是否正在執行。(如果它正在執行,我需要在我的腳本繼續之前要求使用者關閉它。)
預設情況下,
pgrep
只匹配命令,不匹配參數。要匹配完整的命令行,您需要該-f
選項。$ pgrep -f java_app
從 pgrep 聯機幫助頁:
-f 模式通常只與程序名匹配。設置 -f 時,使用完整的命令行
您可以使用
pidof java
來確定正在執行的java程序,然後獲取每個程序的詳細資訊,例如ps -p $PID -o pid,vsz=MEMORY -o user,group=GROUP -o comm,args=ARGS
,然後您可以確定目標應用程序是否正在執行以及它的使用情況是否需要要求使用者關閉或繼續。