Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何获取派生java进程的PID_Java_Process_Pid_Spawn - Fatal编程技术网

如何获取派生java进程的PID

如何获取派生java进程的PID,java,process,pid,spawn,Java,Process,Pid,Spawn,我正在编写几个java程序,在完成我想做的任何事情之后,我需要在一个单独的JVM中终止/清理。为此,我需要获得我正在创建的java进程的PID 您可以尝试执行命令 pidof 用于查找程序的pid 它在Linux环境中。jps-l可以在Windows和Unix上工作。您可以使用Runtime.getRuntime().exec从java程序调用此命令。jps-l的示例输出如下 9412 foo.bar.ClassName 9300 sun.tools.jps.Jps 您可能需要对此进行解析,然

我正在编写几个java程序,在完成我想做的任何事情之后,我需要在一个单独的JVM中终止/清理。为此,我需要获得我正在创建的java进程的PID

您可以尝试执行命令

pidof

用于查找程序的pid


它在Linux环境中。

jps-l
可以在Windows和Unix上工作。您可以使用
Runtime.getRuntime().exec
从java程序调用此命令。
jps-l的示例输出如下

9412 foo.bar.ClassName
9300 sun.tools.jps.Jps
您可能需要对此进行解析,然后检查完全限定名,然后从相应行获取pid

private static void executeJps() throws IOException {
    Process p = Runtime.getRuntime().exec("jps -l");
    String line = null;
    BufferedReader in = new BufferedReader(new InputStreamReader(
                                                p.getInputStream(), "UTF-8"));

    while ((line = in.readLine()) != null) {
        String [] javaProcess = line.split(" ");
        if (javaProcess.length > 1 && javaProcess[1].endsWith("ClassName")) {
            System.out.println("pid => " + javaProcess[0]);
            System.out.println("Fully Qualified Class Name => " + 
                                           javaProcess[1]);
        }
    }
}

请注意,Java 9将公开一些与系统无关的方法,例如:

System.out.println("Your pid is " + Process.getCurrentPid());

这可能会对你有所帮助。这似乎是一个与Ken非常相似的问题。多一点信息可能会有所帮助。听起来您想启动Java程序A、程序B和程序C。然后让Java程序D终止A、B和C的进程。您是从程序D启动A、B和C吗?有没有什么原因a、B和D不能自己清理?如果你不告诉我们你是如何创建这些进程的,我们就帮不了你。嘿,是的,基本上我是用jvm a来生成一个单独的jvm B进程,jvm a就会结束。在完成一些工作之后,我将需要jvm C在Win7 64位和JDK 1.8:D上关闭jvm BWorks,我刚刚更改了:if(javaProcess.length>1&&javaProcess[1]。contains(“myJarName”))