GNU/Linux >> Linux の 問題 >  >> Linux

同じターミナルで一度に複数のコマンドを並行して実行する

この 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

Linux
  1. WebブラウザでLinuxを実行するための10のベストWebサイト

  2. bash スクリプトのコマンドは並行して実行されますか、それとも次々に実行されますか?

  3. 複数のコマンドの実行時間を計る

  1. 遅れてバックグラウンドでコマンドを実行する方法は?

  2. AVD と VirtualBox を同時に実行する

  3. 前のウィンドウと同じディレクトリで新しいターミナル ウィンドウを生成する

  1. ターミナルに出没する8つの不気味なコマンド

  2. 複数のリモートシステムで単一のコマンドを一度に実行する方法

  3. Mate-terminalの複数のインスタンスが同じPidを持っているのはなぜですか?