« CSV の行を分解 | メイン | Movable Type プラグイン作成入門(1) »

2004年08月05日

二重起動の防止

あるプログラムが走っているときに、同時に同じプログラムを起動させたくないときがある。Windows 環境であれば mutex オブジェクトを使うことができ、Perl にも Win32::Mutex モジュールが存在する。
use Win32::Mutex;
die "二重起動" if(Win32::Mutex->open('hogehoge'));
$mutex=Win32::Mutex->new(1, 'hogehoge');
while(1){
    print ++$n,"\n";
    sleep(5);
};
2行目で他に hogehoge という名前の Mutex オブジェクトが作られていないかどうかチェックし、もし他で hogehoge という名の Mutex オブジェクトが作られていれば、先へ進まずに終了する。3行目では hogehoge という Mutex オブジェクトを作成している。
したがって、このスクリプトを2つ起動しようとしても、2つ目は2行目のチェックで引っかかって終了してくれるはずである。

ただし、タイミングによっては完璧ではないようだ。

投稿者 augustus : 2004年08月05日 22:19

トラックバック

このエントリーのトラックバックURL:
http://www.augustus.to/cgi-bin/blog/mt-tb.cgi/67

コメント

コメントしてください




保存しますか?