
データドリブン経営の前提として考えるMVV:ミッション・ビジョン・バリューと戦略・戦術・戦法
前回は、STARTコマンドでコンソールコマンドを並列動作させる方法を解説しました。
並列処理の話(その2) Windowsでコマンドを並列実行する(前編)
今回は、複数並列動作させたコマンドの終了待ちをする方法を解説します。
起動されたコマンドは、Windows内でプロセスという単位で実行されています。プロセスが動作中かどうかを判断するためには、プロセスIDが必要です。しかし、STARTコマンドは起動したプロセスのプロセスIDを返してくれません。
そこで、Windowsに標準装備されている「WMI:Windows Management Instrumentation」という機能を使用します。WMIを制御するコマンドは「wmic」です。
起動してみましょう。
C:Usersosuga>wmic process create “tree.com c:” (Win32_Process)->Create() を実行しています メソッドが正しく実行しました。 出力パラメーター instance of __PARAMETERS { ProcessId = 1780; ReturnValue = 0; }; |
正常に起動された場合、ProccessIdが表示され、ReturnValueは0になります。
次に、このProcessIdが稼働中かどうかチェックします。
C:Usersosuga>wmic process where ROCESSID=1780) GET Caption 利用できるインスタンスがありません。 |
うっかりしている間にコマンドが終わってしまったようです。
今度はtree実行中に急いでコマンドを打ちます。
C:Usersosuga>wmic process create “tree.com c:” (Win32_Process)->Create() を実行しています メソッドが正しく実行しました。 出力パラメーター instance of __PARAMETERS { ProcessId = 12868; ReturnValue = 0; }; C:Usersosuga>wmic process where (PROCESSID=12868) GET Caption Caption tree.com |
Captionというカラムにtree.comというコマンド名が表示されました。どうやら、Captionという文字列が表示されればプロセスは生きていると考えて良さそうです。
この実験の結果から、バッチを作成してみましょう。
それでは、新しいバッチファイルを作成し、次の文を入力してください。
C:Usersosuga>notepad tst2.bat |
実行すると、tree.comが終了するまでうまく待ってくれているようです。
しかし、この方法では、複数のプロセスを待てないので、もう一ひねりして、複数のプロセスを待つようにします。
プロセスの存在チェックでプロセスIDだけを表示し、合致するものがある間はループを続けるようにしました。(この場合、DELIMSは必要ないですね)
一つ目と二つ目のプロセスが直書きで、ちょっとダサいですが、実行できることはわかっていただけると思います。
この方法の唯一の問題点は、実行コマンドの終了コードが取得できないということです。
さて、ちょっとオマケなのですが、このWMICというコマンド。
パラメーターに「/NODE:”192.168.10.1”」というように別のマシンのIPアドレスかマシン名を入れると、リモートでのプロセス実行と終了監視ができます。実行ユーザーの権限などまだ考慮することはありますが、Unixのrshellのような事ができるので、試してみたらいかがでしょうか。
並列処理の話(その1) ~変換処理の並行動作について(前編)~
並列処理の話(その1) ~変換処理の並行動作について(後編)~
並列処理の話(その2) Windowsでコマンドを並列実行する(前編)
並列処理の話(その4) ハイパースレッディング・テクノロジー
20年以上の実績に裏打ちされた信頼のデータ連携ツール「Waha! Transformer」で、自社に眠るデータを有効活用。まずは無料のハンズオンセミナーや体験版で効果を実感していただけます。
Rankingランキング
New arrival新着
Keywordキーワード