2011-06-06 59 views
-1

如果一个进程是通过java runtime.exec(通过ssh)启动的,你如何回到这个进程来杀死它(通过ssh)?有没有办法一旦启动就获得被调用的进程的PID?通过ssh发送“kill”是获得PID的唯一途径吗?如何杀死一个使用java api的远程机器进程

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

没有任何自动获取远程机器PID“prog”的方法。如果你有对prog的源代码的控制,你可以让它输出PID到stdout,然后你可以从你的Process中读取它。

假设你在一个* nix类型的机器上......一旦你有了PID,要杀死它,你将需要使用ssh发送另一个命令到远程机器。像

String[] cmdKill = {"/usr/bin/ssh", "remoteIPAdd", "/bin/kill", ""+pid}; 

被喂入一个新的过程应该做的伎俩。