Bashスクリプトでスレッドを使用することは可能ですか? Javaにドライバクラスがあります。同時に複数のインスタンスを実行しようとしています。これを行う唯一の方法は、bashでスレッドを作成することですが、それでも可能かどうか確認してください。
Bashはスレッド自体をサポートしていませんが、次のように複数のJavaプロセスをバックグラウンドで起動できます。
Java myprog &
Java myprog &
Java myprog &
スレッド管理ユーティリティを備えたPythonまたはRubyを調べれば、それ以上のものは何でも、それぞれが完了するのを待って、出力/終了ステータスなどを収集できます。
編集:wait
を使用するための@CédricJulienからの提案を借用します。これは、より完全な例です。これを考えるとMyProg.Java
プログラム:
public class MyProg {
public static void main(String[] args) {
System.exit(Integer.parseInt(args[0]));
}
}
次のように書くことができますbash-threads.sh
スクリプトを使用して、複数のインスタンスを同時に起動します。
#!/bin/bash
set -o errexit
Java MyProg 1 &
pid1=$!
Java MyProg 0 &
pid2=$!
Java MyProg 2 &
pid3=$!
wait $pid1 && echo "pid1 exited normally" || echo "pid1 exited abnormally with status $?"
wait $pid2 && echo "pid2 exited normally" || echo "pid2 exited abnormally with status $?"
wait $pid3 && echo "pid3 exited normally" || echo "pid3 exited abnormally with status $?"
その出力は次のとおりです。
pid1 exited abnormally with status 1
pid2 exited normally
pid3 exited abnormally with status 2
一部の「bashスレッド」を起動することはできませんが、コマンドの後に&
を使用するだけで、bashでサブプロセスを起動でき、バックグラウンドプロセスで起動します。
プロセスの起動後にwait
を呼び出して、プロセスが完了するのを待ちます。
これを試して
first_command &
second_command &
wait