プロが教えるわが家の防犯対策術!

とあるプログラムを定期的に
バッチファイルで起動させています。
プログラムは処理が完了すると自動で終了させています。

ただ、時間の間隔はさほど大きくないため、
先だっての起動プログラムが動いているときに
次のタスクにて2重でプログラムが動き出す可能性が出てきました。

バッチファイル上で、その名称のプログラムが動いていないか確認し、
動いていた場合は起動しないようにできないでしょうか?

A 回答 (4件)

バッチファイル上でタスクを監視するのは出来ないと思います。



バッチから起動している「とあるプログラム」が何言語で作られているかわかりませんが、そっちで2重起動禁止は実現できませんか?

もしくは、バッチファイルの実行中はAというファイルを作成しておくようにして、「Aと言うファイルがあればプログラムを起動しない」という制御を入れるとか・・・。
※この場合、バッチファイルはプログラムが終了するまでWAITしないと意味ないですけど^^;
    • good
    • 1
この回答へのお礼

とあるプログラムはVCで作成されています。
ですので、2重起動禁止は実現できるのですが‥
バージョン管理があいまいなソースのため、
下手に内容は触りたくないのです。

実行中にファイルを作成しておく件、なるほどと思いました!(@o@)
しかし何らかの原因で1度プログラムがこけてしまうと2度と動作しないんですよね・・・
うーん・・悩みます。

ご回答ありがとうございました(^^)

お礼日時:2006/10/05 19:09

二重起動を防ぐのは、#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
    • good
    • 1
この回答へのお礼

ソースまでお書きいただきありがとうございます。

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

ありがとうございました。

お礼日時:2006/10/06 09:50

>動作させているのは2000serverです。



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

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

お礼日時:2006/10/06 09:36

XP だったら、


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

動作環境を記載しておらず申し訳ありません。
動作させているのは2000serverです。

しかしXPではその様なことが出来るのですね!
自分の端末で試したところ、ばっちり動きました。
今後XPで同様の事態があれば、是非利用したいと思います。
ご回答ありがとうございました・

お礼日時:2006/10/05 19:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています