機能の並列実行

機能の並列実行

私は3つの機能があります:

function WatchDog {
sleep 1

#something
}
function TempControl {
sleep 480

#somthing
}
function GPUcontrol {
sleep 480

#somethimg
}

私はそれを実行しています

WatchDog | TempControl | GPUcontrol

スクリプトは次の場所にあります。ローカルファイル文書。したがって、論理的に自動的に実行する必要があります。問題は、最初の機能が正しく機能することです。しかし、2番目と3番目はまだ始まっていません。しかし、このように始めると

sudo bash /etc/rc.local 

うまくいきます。問題は何ですか? init.dディレクトリに追加しても同じことが起こります。

答え1

単にGNUを使用してください平行線:

export -f WatchDog && export -f TempControl && export -f GPUcontrol

parallel -j3 ::: WatchDog TempControl GPUcontrol

  • export -f <funcname>- 参照する関数のエクスポートparallel

  • -j N- 走った窒素並列作業


デモテストケース:

function a () { seq -s' ' 1 10; sleep 10; }
function b () { echo {a..z}; sleep 5; }
function c () { echo {-100..-80}; sleep 10; }
export -f a && export -f b && export -f c
parallel --no-notice  -j3 ::: c b a

a b c d e f g h i j k l m n o p q r s t u v w x y z
-100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80
1 2 3 4 5 6 7 8 9 10

答え2

パイプは、あるコマンドの出力を次のコマンドに送信します。&(&記号)を探しています。これはプロセスをフォークし、バックグラウンドで実行します。したがって、実行すると:

WatchDog & TempControl & GPUcontrol

3つすべてを同時に実行する必要があります。

また、実行時にsudo bash /etc/rc.local並列ではなくシリアルで実行すると思います(次のコマンドを開始する前に各コマンドが完了するのを待ちます)。次のようになります。

WatchDog ; TempControl ; GPUcontrol

コマンド区切り記号

;セミコロン -command1 ; command2

command2成功するかどうかにかかわらず、完了後に実行されます。command1

&アンパサンド -command1 & command2

これはcommand1サブシェルで実行され、command2同時に実行されます。

||または論理演算子 -command1 || command2

これは実行されcommand1実行されますcommand2 ただcommand1失敗した場合

&&AND論理演算子 -command1 && command2

これは実行されcommand1実行されますcommand2 ただ成功したらcommand1

関連情報