0

以下のコードを使用して、replace.exe の単一インスタンスが実行されていることを確認しました。replace.exe を作成して Windows で実行すると、サイズが 0 kb の replace (拡張子なし) という名前のファイルがもう 1 つ作成されます。

そのファイルを作成したくありません。それ以外の場合は、replace.exe の実行が終了した後にファイルを自動的に削除します。

助けてください。ありがとう

use Fcntl qw(:flock);
# Check if any instance of this script is already running
my $lock = "replace";
sub LockOut ( ) {
  &print_log ("A instance of this script is running. Therefore exiting. Please try after some time.");
  print "A instance of this script is running. Therefore exiting. Please try after some time.";
  exit 1;
}

open ( my $pid, '>', $lock );
flock ( $pid, LOCK_EX | LOCK_NB ) or LockOut( );
4

1 に答える 1

0

どういうわけか Windows 実行可能ファイルにコンパイルされた perl スクリプトを使用していて、それを単一のインスタンスで実行したいと考えています。

次のことを試すことができます。

use Fcntl qw(LOCK_EX LOCK_NB LOCK_UN);
if (!flock DATA,LOCK_EX|LOCK_NB)
{
    print STDERR "Already running! Exiting...\n";
    exit;
}

#### DO NOT REMOVE ####
__DATA__
This DATA-Block will be locked by the single-instance logic,
preventing it to be locked more than once.

perlscript では、__DATA__ ブロックを排他的にロックできますが、スクリプト コンパイラがその機能を保持しているかどうかはわかりません。

それでもうまくいかない場合は、実行可能ファイルのファイル名を見つけて代わりにロックすることができます。これは、「replace」というファイルをロックするのと同じことを行う必要があります。

于 2013-03-21T12:40:07.513 に答える