I knew that there had to be at least one more way to do this because I read about using perl and the Runtime.exec() method to get the PID. But I didn't like the perl part of the hack so I didn't mention it in my post.
Today after some time playing with bash and an annoying behavior of
Runtime.exec(String)
method I came up with a 5th approach of retrieving the current PID. This approach uses $PPID
and Runtime.exec(String[])
:
import java.io.IOException; public class Pid { public static void main(String[] args) throws IOException { byte[] bo = new byte[100]; String[] cmd = {"bash", "-c", "echo $PPID"}; Process p = Runtime.getRuntime().exec(cmd); p.getInputStream().read(bo); System.out.println(new String(bo)); } }The code is pretty straight forward. Get Runtime object, call exec(String[]) method pass it
bash -c "echo $PPID"
(after splitting it into a String array) and read the output.Why not to pass the command as one string? Because of problems with quotes described in this bug report.
As I mentioned before even this approach is not perfect, because it depends on *nix and bash, but it is an improvement compared to depending on perl :)
1 comment:
Very useful tip, thanks a lot :)
Post a Comment