我使用下面的代码来检查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( );
答案 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'的文件相同。