为什么java无法停止正在运行的openvpn进程?
我正在使用junit进行一些需要不同openvpn连接的集成测试。在测试中,我使用ProcessBuilder类启动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
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启动进程时会出现一些问题