如何在java中找到进程的进程ID(pid)?

Leo*_*zen 21 java pid process

如果我通过Java得到一个进程对象Runtime.getRuntime().exec(...),或者ProcessBuilder.start(),我可以等待它Process.waitFor(),就像是Thread.join(),或者我可以用它来杀死它Process.destroy(),就像被弃用的那样Thread.stop().

但是:我如何找到过程对象的pid?我在官方文档中没有看到这样做的方法.我可以用Java做到这一点吗?如果是这样,怎么样?

nsf*_*n55 10

这家伙呼唤bash获得PID.我不确定是否有解决问题的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 "";
  }
}
Run Code Online (Sandbox Code Playgroud)

资料来源:http: //www.coderanch.com/t/109334/Linux-UNIX/UNIX-process-ID-java-program


Bre*_*den 7

与上面提到的其他工具类似,jpsJava运行时附带了命令行工具.它会吐出所有正在运行的JVM的PID.好处是需要解析的输出仅限于JVM进程.