如果一个进程是通过java runtime.exec(通过ssh)启动的,你怎么回到这个进程来杀死它(通过ssh)?有没有办法在启动后获取调用过程的PID?如果可以获得PID,通过ssh发送“kill”是唯一的方法吗?
Process p;
public void startSomething()
{
String[] cmd = {"/usr/bin/ssh", "remoteIPAdd", "./prog"};
try
{
p = Runtime.getRuntime().exec(cmd);
}
catch(IOException e)
{
System.out.print("Epic Fail");
}
}
public void stopSomething()
{
//p.destroy if local would work but not remotely
//How do I stop the remote process then?
}
答案 0 :(得分:0)
没有任何自动方法可以获取远程机器的“prog”PID。如果你控制了prog的源代码,你可以将它的PID输出到stdout,然后你可以从你的Process中读取它。
假设您使用的是* nix型机器......一旦有了PID,要杀死它,您需要使用ssh向远程机器发送另一个命令。像
这样的东西String[] cmdKill = {"/usr/bin/ssh", "remoteIPAdd", "/bin/kill", ""+pid};
被投入新流程应该可以解决问题。