Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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无法停止正在运行的openvpn进程?_Java_Testing_Kill_Openvpn - Fatal编程技术网

为什么java无法停止正在运行的openvpn进程?

为什么java无法停止正在运行的openvpn进程?,java,testing,kill,openvpn,Java,Testing,Kill,Openvpn,我正在使用junit进行一些需要不同openvpn连接的集成测试。在测试中,我使用ProcessBuilder类启动openvpn连接: Process p = new ProcessBuilder("sudo", vpnBinary, clientfile).directory(tempDir.toFile()).inheritIO().start(); vpnProcess = p; 为了在测试结束时关闭连接,我在测试设置期间添加了一个钩子: public static void setU

我正在使用junit进行一些需要不同openvpn连接的集成测试。在测试中,我使用ProcessBuilder类启动openvpn连接:

Process p = new ProcessBuilder("sudo", vpnBinary, clientfile).directory(tempDir.toFile()).inheritIO().start();
vpnProcess = p;
为了在测试结束时关闭连接,我在测试设置期间添加了一个钩子:

public static void setUpBeforeClass() throws Exception {
    Runtime.getRuntime().addShutdownHook(new Thread() {
            public void run() {
                stopVPNConnection();
            }
}
我尝试了不同版本的stopVPNConnection方法,其中没有一种能以可靠的方式工作

第一:

private static void stopVPNConnection(){

        if(vpnProcess != null){

            LOG.info("Going to shutdown special vpn and start normal vpn");

            vpnProcess.destroy();
            LOG.fine("Destroy signal sent");

        }
}
第二:

private static void stopVPNConnection(){

        if(vpnProcess != null){

            LOG.info("Going to shutdown special vpn and start normal vpn");

            vpnProcess.destroyForcibly();
            LOG.fine("Destroy signal sent");

        }
}
第三个利用了

第四个开始另一个过程:

Process p = new ProcessBuilder("sudo", "/usr/bin/killall", "sudo").inheritIO().start();
到目前为止,所有这些都没有以足够可靠的方式停止openvpn连接以进行自动化测试

有没有更好的方法来停止这个过程


如何理解为什么openvpn没有停止?

您是否尝试过手动停止该过程?当你跑步时,它会停止吗?可能是进程没有响应kill请求。另外,在第四种方法中,您尝试过killall-9。VPN进程可能正在拦截kill请求并忽略它。@詹姆斯·威尔逊:谢谢你的建议。从命令行终止openvpn的工作正如预期的那样-因此从ProcessBuilder启动进程时会出现一些问题