java/shellscript code to find out if a jar file is already running on current machine
jps is a simple command-line tool that prints out the currently running JVMs and what they're running. You can invoke this from a shell script.
jps -l
will dump out the JVM process id and the main class that it's executing. I suspect that's the most appropriate for your requirement.
Noting your comment re. jps being not supported, if it's a valid worry that you can't easily mitigate via testing when you upgrade a JDK/JRE, then perhaps use something like:
pgrep -lf java
Try to create a new jar,
create a class inside with like this (not yet functional code, just a scribble):
static ServerSocket unicorn;public void load(){ unicorn=new ServerSocket(39483); // whatever-port URLClassLoader myloader = new URLClassLoader(new URL[]{this.getClass().getResource("/META-INF/specific.jar")}); ... // do all your unique stuff Runtime.addShutdownHook(new Runnable(){unicorn.close();})}
Place your specific.jar inside the new.jar. If ever another instance of this jar try to be load, a exception will be thrown: Socket already in use.