처음 두 개의 다른 시스템에 ssh'es하는 프로그램을 작성하려고하고 있는데, 그런 다음 이들에 대해 일부 HTTP 요청을 실행합니다. 즉, 내 http 요청을 실행할 수 있으려면 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();
이제 문제는 스레드를 시작한 후, 그렇지 않은 것을 항상 즉시 실행을 시작한다 :
내가 무슨 짓을하는 것은 내가 각 상자 중 하나에 ssh 명령을 실행하는 두 개의 스레드를 가지고있다 , 이는 연결이 이루어지기 전에 제가 요청을 보낼 것을 의미합니다. 스레드가 시작된 후 내 메인 프로그램으로 만 돌아갈 수 있도록 잠금 또는 뮤텍스를 사용하지 않고 간단한 방법이 있습니까? (나는 결코 끝나지 않기 때문에 끝나기를 기다리는 것을 원하지 않는다.) 첫 번째 명령을 한 번 실행하라.이 두 개의 분리 된 쓰레드 대신 백그라운드에서 프로세스를 실행하는 더 좋은 방법이 있다면, 너무 좋을 것이다!)
고마워!
고마워요! 네, -f와 -N은 효과가있었습니다. 이제 패스 프레이즈 입력을 피하는 방법을 알아야합니다. (쉘에서 ssh를 할 때 패스 프레이즈를 어떻게 든 표시하지는 않지만 이런 식으로합니다.) 그러나 이것 이외에는 아주 간단한 해결책이었습니다 :) – N3da