我怎样才能找出 java 当前正在运行的 jar 文件(以及它们的 PID)?

con*_*use 13 java process kill

我有一个.jar因故障而臭名昭著的文件。当发生故障时,只有重新启动才有帮助。我有一种方法来检测故障(读取所述的日志文件.jar)所以我想编写一个脚本,每当发生故障时都会终止进程。问题是:

confus@confusion:~$ ps -A
...
4438 ?        00:00:00 java
4439 ?        00:00:00 java
4443 ?        00:00:00 java
...
Run Code Online (Sandbox Code Playgroud)

所有运行.jar的进程名自然是“java”。我如何找出这些“java”进程中的哪一个是我想要杀死的进程,即正在运行的进程foobar.jar

Egi*_*gil 12

您可以运行该lsof命令,该命令列出哪些进程具有打开的文件,并将您的 jar 文件作为参数提供。使用 less 查看文件的示例:

egil@mutter:~$ lsof foo.c
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
less    18871 egil    4r   REG    8,2        0 53862540 foo.c
egil@mutter:~$
Run Code Online (Sandbox Code Playgroud)

要在脚本中轻松重用 pid,您可以在简洁模式下运行它:

egil@mutter:~$ lsof -t foo.c
18871
Run Code Online (Sandbox Code Playgroud)


Oct*_*ean 8

使用ps ax会有所帮助。

它将以 BSD 样式显示进程树,这只是显示更多信息。

要找到您的特定进程,您只需要 grep 查找 JAR 名称。ps ax | grep JARNAME会做的。