Mou*_*inX 9 bash java shell-script process-management bash-script
我知道关于获取进程 ID 有上百万个问题,但这个问题似乎是独一无二的。谷歌没有给我答案,所以我希望 stackexhange 会有所帮助而不是关闭这个问题。
当涉及到 Java 时,查找进程 ID 似乎更棘手(pgrep 不能正常工作)。
此外,我需要在 bash 脚本中自动执行此操作。我遇到的一个问题是,当我使用ps aux | grepgrep 进程本身时,它总是会出现,所以在一个简单的 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
Run Code Online (Sandbox Code Playgroud)
示例 2 - 即使“java_app”当前正在运行,也不会返回任何内容:
$ pgrep java_app
Run Code Online (Sandbox Code Playgroud)
它什么都不返回。但是,这是“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
Run Code Online (Sandbox Code Playgroud)
我需要的是一个解决方案,我可以插入一个 bash 脚本,它会告诉我感兴趣的 java 应用程序(我知道 jar 文件名和路径)当前是否正在运行。(如果它正在运行,我需要在我的脚本继续之前要求用户关闭它。)
jor*_*anm 12
默认情况下,pgrep只匹配命令,不匹配参数。要匹配完整的命令行,您需要该-f选项。
$ pgrep -f java_app
Run Code Online (Sandbox Code Playgroud)
从 pgrep 联机帮助页:
-f 该模式通常仅与进程名称匹配。设置 -f 时,将使用完整的命令行