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)
使用ps ax会有所帮助。
它将以 BSD 样式显示进程树,这只是显示更多信息。
要找到您的特定进程,您只需要 grep 查找 JAR 名称。ps ax | grep JARNAME会做的。