2016-08-08 20 views
0

私は、シェルスクリプトのコマンドでそのように利用される引数の配列を持っています。私は私がに入力したコマンドをプッシュしているBashシェルスクリプトで複数のスレッドを作成する方法

(現在、我々は複数の端末を開いて、そこにコマンドを起動することによって、マルチスレッドされている)、ここで、各コマンドは、別のスレッドを開始する場所をこの

./runtests.sh -b firefox,chrome,ie 

を行うことができるようにしたいです配列:

if [[ $browser == *","* ]]; then 
    IFS=',' read -ra browserArray <<< "$browser" 
fi 

これで、配列をループしながら別のスレッド(またはプロセス)を開始する必要があります。誰かが正しい方向に私を導くことができますか? sudoのコードで私の推測は、何かのようなものです

for ((c=0; c<${#browserArray}; c++)) 
    do 
    startTests & 

私は右のトラックですか?

答えて

1

これはスレッドではなく、background processです。それらは似ていますが、

したがって、スレッドと軽量プロセスは同じだと言うことができます。

軽量プロセス(LWP)と通常のプロセスとの主な違いは、LWPが同じアドレス空間とオープンファイルなどの他のリソースを共有することです。これらのプロセスは共有されるため、他の通常のプロセス、したがって軽量プロセスの名前に変換します。

NB:Redordered明快

What are Linux Processes, Threads, Light Weight Processes, and Process State

のためにあなたがjobsコマンドを使用して、実行中のバックグラウンド・プロセスを見ることができます。例えば:

[email protected]:~/test/npm-test$ sleep 10000 & 
[1] 23648 
[email protected]:~/test/npm-test$ jobs 
[1]+ Running  

あなたはfgを使用して前面にそれらをもたらすことができます。睡眠時間が経過するまで、カーソルが待機する

[email protected]:~/test/npm-test$ fg 1 
sleep 1000 

[1]+ Stopped     sleep 1000 

と入力して、それを再開する:あなたはそれが CTRL-ZSIGTSTP)を押して( fg 1後のシナリオのように)フォアグラウンドでいたときにこのような何かを与える、仕事を一時停止することができ

bg 1 # Resumes in the background 
fg 1 # Resumes in the foreground 

を入力し、フォアグラウンドで終了したばかりのときにCTRL-CSIGINT)を押すか、または IDに%という末尾のkillコマンドを使用して強制終了できます。

実装上へ、
kill %1 # Or kill <PID> 

./runtests.sh -b firefox,chrome,ie 

Tadaaa:

BROWSERS= 

for i in "${@}"; do 
    case $i in 
     -b) 
      shift 
      BROWSERS="$1" 
      ;; 
     *) 
      ;; 
    esac 
done 

IFS=',' read -r -a SPLITBROWSERS <<< "$BROWSERS" 

for browser in "${SPLITBROWSERS[@]}" 
do 
    echo "Running ${browser}..." 
    $browser & 
done 

は次のように呼び出すことができます。

+0

ありがとうありがとうthats作業:) –

+0

@ D.Arnold恐ろしい!答えを受け入れることを忘れないでください。 –

関連する問題