我使用下面的代码来检查replace.exe的单个实例是否正在运行

时间:2013-03-21 12:20:30

标签: perl fcntl

我使用下面的代码来检查replace.exe的单个实例是否正在运行。当我创建replace.exe并在Windows上运行时,会创建一个名为replace(没有任何扩展名)0 kb大小的文件。

我不希望创建该文件,否则我想在执行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( );

1 个答案:

答案 0 :(得分:0)

我假设您正在使用perl脚本,该脚本以某种方式编译为Windows可执行文件,并且您希望它在单个实例中运行。

您可以尝试以下方法:

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'的文件相同。