我想写一个程序,首先ssh'es到两个不同的机器,然后对它们执行一些http请求。这意味着为了能够执行我的http请求,ssh隧道应该正在运行。如何确保主线程仅在子线程启动后才能继续?
我所做的是,我有两个线程,每个线程运行ssh命令框之一:
Thread thread1 = new Thread(new Runnable(){
public void run(){
try{
Process p1 = Runtime.getRuntime().exec("ssh -A -L12345:localhost:54321 firsthost.com");
p1.waitFor();
}catch (Exception e){}
}
}) ;
thread1.start();
Thread thread2 = new Thread(new Runnable(){
public void run(){
try{
Process p2 = Runtime.getRuntime().exec("ssh -A -L12345:localhost:54321 secondhost.com");
p2.waitFor();
}catch (Exception e){}
}
}) ;
thread2.start();
现在的问题是,启动线程之后,他们并不总是立即开始运行这意味着我将在连接之前发送我的请求。有没有一种简单的方法(不使用锁或互斥锁),我可以确保在线程启动后我只返回到主程序? (我不想当然等待它们结束,因为它们永远不会结束,只需运行第一个命令:)另外,如果有更好的方法在后台运行进程而不是使用这两个独立的线程,那么太棒了!)
谢谢!
非常感谢!是的,使用-f和-N它工作。我只需要弄清楚如何避免输入我的密码短语。 (当我从shell执行ssh时,它不会以某种方式提示我的密码,但以这种方式进行。)但除此之外,这是一个非常简单的解决方案:) – N3da