我已经使用下面的代码来检查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( );
我假设您正在使用一个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"的文件一样。