Windows及びLinux/Unixでプロセス並行実行。 | ガラス越しの世界

ガラス越しの世界

とまぁ色々あるよなないよなでぼちぼち更新。
たまには技術情報もあるよw

はい、こんばんは。

たまには技術情報を。

WindowsのタスクとかLinuxとかのシェル起動で重い処理を複数実行する場合、平行実行したい場合がありますね。
そのための方法についてチョット調べています。

とりあえずLinux/Unixでは以下の方法で並行実行が実装できます。シェル内に記述するイメージで読んでください。
・実行したいコマンドを、引数とかリダイレクトの後に「&」をつけて実行するように記述します。そうすると、コマンドをバックグラウンド実行します。
(例:>sleep 50 &)
・すべてのコマンドのバックグラウンド実行を記述したら、waitコマンドを記述します。
そうすると、waitコマンドが、実行しているシェルから起動されているバックグラウンドプロセスの終了を待つようになります。
・waitコマンドの記述の後に、その後に続く処理を記述します。

これの繰り返しです。
設定ファイルを準備して、起動する順番とバックグラウンドで実行するか否かを判定するフラグとwaitコマンドを実行するタイミングを指定できるようにしたりしたら簡易ジョブスケジューラも作れるなぁ。。。と思っているのですが。
。。。サンプルシェル書いてみましょうか?
この日記では書きませんが。
いいねがついてたら別の日記で書きましょうかね。


次に、Windowsタスクで同じことをする方法。
DOSバッチだけでは無理っぽいです。
PowerShellを使えば比較的簡単にできるみたいですが、使ったことがないので実験しながらじゃないと作れないなー。
実績のある方法としては。
VBでWinAPIを使う方法。
WaitforsingleobjectっていうAPIを使うとバックグラウンド起動したブロセスの終了を待てます。
バックグラウンド起動の方法は忘れましたw
この辺の方法はググれば出てくると思うので割愛します。
VB6で実装した経験がありますし、確かAccessVBAでも作った記憶があるような無いような。
なので、VBScriptとかでも出来るんじゃなかろうか。。。
VBScriptで作れれれば、WSHを介してDOSプロンプトから呼び出せる。。。はず。
今のところ特に必要になっているわけではないので(すぐに作れるならニーズはありますが)、業務上で作るならリーダーの許可をとってからになります。
片手間に自宅で作ってみてもいいんですが、ちょっと面倒臭いなー。

まぁ。
こういう情報があまりネットに転がっていないみたいなので、とりあえずヒント程度に。

などと。
にゃー。