1. ホーム
  2. linux

[解決済み] 同じターミナルで複数のコマンドを同時に並列実行する

2023-04-29 21:35:29

質問

いくつかのコマンドを実行したいのですが、それぞれのコマンドは Ctrl-C が押されるまで終了しません。一度にすべてのコマンドを実行し、Ctrl-C ですべてを終了させるために実行できるものはあるでしょうか。それらはターミナル出力を共有することができます。

具体的には、私は compass コンパイラー、coffeescript コンパイラー、およびファイルの変更を監視するカスタム コマンドをすべて実行して、ファイルの変更を監視しています。各コマンドのためにターミナルをロードしたくありません。

どのように解決するのですか?

このbashスクリプトはN個の並列スレッドに対応するものである。各引数はコマンドです。

trap は、SIGINT がキャッチされると、全てのサブプロセスを kill します。

wait $PID_LIST は各プロセスの完了を待っている。 すべてのプロセスが完了すると、プログラムは終了します。

#!/bin/bash

for cmd in "$@"; 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並列スリープを開始し、"sleep 4"が終了するまで待ちます。