Yesterday I wrote a post about getting the current PID in Java.
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[]):
The code is pretty straight forward. Get Runtime object, call exec(String[]) method pass it
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));
}
}
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 :)

0 comments:
Post a Comment