On a POSIX-compliant system, is there a way to get the process ID ofthe JVM running the current code?
There is no standard means of obtaining the process ID ofthe JVM. The most efficient way of implementing this is to write aJNI method that produces this information.
However, simply returning the value of the POSIX getpid() function may not be portable.Different POSIX systems have different threading models, and it ispossible on some systems for threads to receive their own processids. Therefore you must make sure that the method you write reallyproduces the process id of the JVM and not just the process ID of the currentthread.
Rather than go to the trouble of writing a JNI method that may or maynot be portable to other POSIX systems, you can do something that isguaranteed to work on any POSIX system. If you are deploying Java onPOSIX, you are probably starting your applications from a simple shellscript. The easiest way to convey the process ID of the JVM to a Javaprocess is to get the ID of the shell, $$ for Bourne-derivedshells, and pass it as an argument to the Java program. Whether it’sthe first or last argument, or conveyed with a PID flag, is up to you.When you execute the Java program, be sure to use the shell’s execcommand. This will replace the shell with the new Java process, butpreserve the same process id. For example:
#!/bin/shexec java helloworld $$