この bash スクリプトは、N 個の並列スレッド用です。各引数はコマンドです。
trap
SIGINT がキャッチされると、すべてのサブプロセスを強制終了します。
wait $PID_LIST
各プロセスが完了するのを待っています。すべてのプロセスが完了すると、プログラムは終了します。
#!/bin/bash
for cmd in "[email protected]"; do {
echo "Process \"$cmd\" started";
$cmd & pid=$!
PID_LIST+=" $pid";
} done
trap "kill $PID_LIST" SIGINT
echo "Parallel processes have started";
wait $PID_LIST
echo
echo "All processes have completed";
このスクリプトを parallel_commands
として保存します そして実行可能にします。
このスクリプトの使用方法は次のとおりです:
parallel_commands "cmd arg0 arg1 arg2" "other_cmd arg0 arg2 arg3"
例:
parallel_commands "sleep 1" "sleep 2" "sleep 3" "sleep 4"
4 並列スリープを開始し、「スリープ 4」が終了するまで待ちます。
@alessandro-pezzato のコメントに基づく.Run multiples commands by using &
コマンドの間。
例:
$ sleep 3 & sleep 5 & sleep 2 &
バックグラウンドでコマンドを実行します。
GNU 並列を使用:
(echo command1; echo command2) | parallel
parallel ::: command1 command2
殺すには:
parallel ::: command1 command2 &
PID=$!
kill -TERM $PID
kill -TERM $PID