问题描述
|
如果一个进程是通过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?
}
解决方法
没有任何自动方法可以获取“ prog \”的远程计算机的PID。如果您可以控制prog的源代码,则可以将其PID输出到stdout,然后可以从Process中读取它。
假设您在* nix类型的计算机上...有了PID,要杀死它,您将需要使用ssh向远程计算机发送另一个命令。就像是
String[] cmdKill = {\"/usr/bin/ssh\",\"remoteIPAdd\",\"/bin/kill\",\"\"+pid};
被送入新流程应该可以解决问题。