• ベストアンサー

バッチファイルで多重起動を防ぐ

とあるプログラムを定期的に バッチファイルで起動させています。 プログラムは処理が完了すると自動で終了させています。 ただ、時間の間隔はさほど大きくないため、 先だっての起動プログラムが動いているときに 次のタスクにて2重でプログラムが動き出す可能性が出てきました。 バッチファイル上で、その名称のプログラムが動いていないか確認し、 動いていた場合は起動しないようにできないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

バッチファイル上でタスクを監視するのは出来ないと思います。 バッチから起動している「とあるプログラム」が何言語で作られているかわかりませんが、そっちで2重起動禁止は実現できませんか? もしくは、バッチファイルの実行中はAというファイルを作成しておくようにして、「Aと言うファイルがあればプログラムを起動しない」という制御を入れるとか・・・。 ※この場合、バッチファイルはプログラムが終了するまでWAITしないと意味ないですけど^^;

April8
質問者

お礼

とあるプログラムはVCで作成されています。 ですので、2重起動禁止は実現できるのですが‥ バージョン管理があいまいなソースのため、 下手に内容は触りたくないのです。 実行中にファイルを作成しておく件、なるほどと思いました!(@o@) しかし何らかの原因で1度プログラムがこけてしまうと2度と動作しないんですよね・・・ うーん・・悩みます。 ご回答ありがとうございました(^^)

その他の回答 (3)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

二重起動を防ぐのは、#1の方がお書きのようにファイルやディレクトリを作り、もしあれば一定時間待って、再度ファイルのチェックをするというのが一般的です。MKDIRを使うと作成と存在チェックが一度にできるのでタイミングによるすり抜けが防止できます。 :loop mkdir aaa.tmp 2>NUL rem 作成できれば、OK。エラーならすでに有ったということ if %ERRORLEVEL%==0 goto next rem 1秒待つ ping -n 2 127.0.0.1 >NUL goto loop :next 処理 rem 処理が終われば消しておく rmdir aaa.tmp

April8
質問者

お礼

ソースまでお書きいただきありがとうございます。 毎日サーバは再起動させているので、 立ち上がり時に自動でaaa.tmpを削除するようにしていれば、 万一何かの都合で異常終了してしまってファイルが残ってしまっていても 1日以上動作しない事態は防げますよね? ありがとうございました。

回答No.3

>動作させているのは2000serverです。 Windows2000シリーズでも、ResourceKitを導入していれば、pulist.exeなるプログラムで同じ事は出来ます。 ResourceKitをお持ちでなくても、少し前までは、同機能のフリーウエア版があったのですが、 残念ながら、今は公開されていないみたいです。 (ちゃんと調べてないので、どこかで公開されているかもしれません)

April8
質問者

お礼

リソースキット中に確認できるプログラムがあるのですね。 フリーウェアについても、早速探してみます(^^) ご回答ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

XP だったら、 tasklist で動作中のプロセスのリストを得ることができます。 例えば tasklist | findstr "とあるプログラム" >nul として %ERRORLEVEL% の値が0(つまりfindstr で指定した文字列が見つかった)ならプログラムは、起動中で 値が1(つまりfindstr で指定した文字列が見つからなかった)ならプログラムは、起動していない。 のようにはんだんできると思います。

April8
質問者

お礼

動作環境を記載しておらず申し訳ありません。 動作させているのは2000serverです。 しかしXPではその様なことが出来るのですね! 自分の端末で試したところ、ばっちり動きました。 今後XPで同様の事態があれば、是非利用したいと思います。 ご回答ありがとうございました・