I have a .jar
file which is notorious for malfunctions. When a malfunction occurs, only a restart helps. I have a way to detect that malfunctions (reading the log-file of said .jar
) So I want to write a script, that kills the process whenever the malfunction occurs. The problem is:
confus@confusion:~$ ps -A
...
4438 ? 00:00:00 java
4439 ? 00:00:00 java
4443 ? 00:00:00 java
...
The process name of all running .jar
s is naturally "java". How do I find out, which of these "java"-processes is the one I want to kill, i.e. the one running foobar.jar
?
You can run the lsof
command, which lists which processes has open files, with your jar file given as an argument. An example viewing a file with 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:~$
To easily reuse the pid in a script, you could run it in terse mode:
egil@mutter:~$ lsof -t foo.c
18871
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments