Rectangle 27 0

How do I find the process ID (pid) of a process started in java?


/**
 * Gets a string representing the pid of this program - Java VM
 */
public static String getPid() throws IOException,InterruptedException {

  Vector<String> commands=new Vector<String>();
  commands.add("/bin/bash");
  commands.add("-c");
  commands.add("echo $PPID");
  ProcessBuilder pb=new ProcessBuilder(commands);

  Process pr=pb.start();
  pr.waitFor();
  if (pr.exitValue()==0) {
    BufferedReader outReader=new BufferedReader(new InputStreamReader(pr.getInputStream()));
    return outReader.readLine().trim();
  } else {
    System.out.println("Error while getting PID");
    return "";
  }
}

I think this will give the pid of the JVM process... not the process spawned by Java which I believe is what the question is asking.

I think you need to read a bit closer. It spawns a process thats only job is to echo its own PID to its stdout which itself is piping to the stdin file descriptor associated with the JVM.

Just saying what? This is not germane to the problem. The question is about accessing a PID not java best practices.

This guy calls out to bash to get the PID. I'm not sure if there is an java solution to the problem.

Vectors are old-hat, and is synchronized - no real need to use that type of collection - try using an ArrayList instead. Just saying.

Note
Rectangle 27 0

How do I find the process ID (pid) of a process started in java?


Similar to the other tools mentioned, there is the jps command line tool that comes with the Java runtime. It spits out the PIDs of all running JVMs. The benefit is the output one needs to parse is confined to only the JVM processes.

Note