)(参加に永遠にハングアップ、私はそれがこの方法を使用してください:SSHJ私はSSHJを使用して、いくつかのコマンドを実行
private Command executeCommand(String command, SSHClient client) {
Command commandObject = client.startSession().exec(command);
commandObject.join();
return commandObject;
}
私は、このコマンドを実行するまで、それがうまく機能:この場合
cd $SOLR; nohup java -Dsolr.solr.home=./solr -DSTOP.PORT=8079 -DSTOP.KEY=stopkey -jar start.jar 2> logs/solr.log &
プログラム全体がハングアップする
commandObject.join();
もちろん、起動するプロセスが開始されます。また、シェルから実行された同じ行がすぐに戻ります。
これを克服する理由と方法は何ですか?
編集:私は(参加)が、(コモンズ-IOで)コマンドのSYSOUTを読んでいないとき 同じことが起こります:
IOUtils.toString(commandObject.getInputStream()))
stdinとstderrをリダイレクトすることが考えられるので、最後のアンパサンドの前に '2>&1'を置くと助けになるかもしれません。しかし、私は別のコマンドで同様の問題を抱えているので、おそらくそれを完全に解決するわけではありません。 – bstempi
私のコメントに対する訂正:それは役に立たない。あなたが特に指定しなければ、nohupはリダイレクトするだろう。私はこのlibにいくつかのスレッディング問題があることに気づいた。おそらくあなたは1つを遭遇しましたか? – bstempi
@ilfrin、 'commandObject.join()'をタイムアウトなしで呼び出すため、メインスレッドがブロックされます。これは、現在のスレッドが通知を待つのをブロックします。呼び出されたプログラムがハングアップすると、メインスレッドもハングします。 – Boyan