0

より具体的には、私が本当にやりたいことは、2 つの新しいターミナルを開くことです。terminal_1 から @host1 に ssh して、host1 に対して program1 を実行します。terminal_2 から @host2 に ssh して、host2 に対して program2 を実行します。program1 の出力を terminal_1 で表示し、program2 の出力を terminal_2 で表示する必要があります。

(私は xterm と ssh @host を開くことができました。2 番目のコマンド "&&java echo_1" を渡そうとしましたが、何もしません)

コードは次のとおりです。

import java.io.*;

public class multi1 implements Runnable {

    public void run() {

    try {
        String ss = null;
            Runtime obj = null;
        String[] newcmd = new String[]{"/usr/bin/xterm","-hold","-e","ssh andreas@192.168.0.0&&java echo_1"};

        Process p = Runtime.getRuntime().exec(newcmd);

            BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

            while ((ss = stdInput.readLine()) != null) {
                    System.out.println(ss);
            }
        }catch (IOException e) {
            System.out.println("FROM CATCH" + e.toString());
        }
    }

    public static void main(String[] args) throws Exception {
        Thread th = new Thread(new multi1());
        th.start();
    //Thread th2 = new Thread(new multi1());
    //th2.start();
    }
}
4

3 に答える 3

0
BufferedReader stdError = .. 

..再び参照されていないように見えるため、Eclipseによって警告のフラグが立てられます。これは、エラーストリームが消費されていないことを示します。そうする。

の使用に関するその他のヒントについては、 runtime.exec情報Processにリンクされている記事を参照してください。ページ。また、とをマージできる、を使用することProcessBuilderをお勧めします。これにより、1つのループで両方を簡単に使用できるようになります。System.outSystem.err

于 2012-07-26T10:02:37.527 に答える
0

私はむしろjschまたは他のsshライブラリを使用し、端末とexecなしでそれを行います。

于 2012-07-25T15:38:12.123 に答える
0

私がすぐに懸念していることの 1 つは、生成されたプロセスから stdout/stderr を処理していないことです。これを行わないと、プロセスからの出力とプロセス自体がブロックされる可能性があります。詳細については、この回答を参照してください。

于 2012-07-25T15:49:01.583 に答える