gpt4 book ai didi

perl - 如何确保一次只运行一个 Perl 脚本副本?

转载 作者:行者123 更新时间:2023-12-04 22:51:46 24 4
gpt4 key购买 nike

我需要确保一次只运行我的 Perl 脚本的一个副本。根据建议here我写了一个子来做检查:

sub check_instances {
open my $fh, '<', $0 or die $!;

unless (flock($fh, LOCK_EX|LOCK_NB)) {
print "$0 is already running. Exiting.\n";
exit 1;
}
}

但它不起作用。可能是什么问题?

最佳答案

您正在使用 sub 范围内的词法文件句柄。当check_instances返回时,文件句柄自动关闭,从而释放锁。因此,除非两个副本完全同时检查,否则您永远不会看到冲突。

只要脚本正在运行(或者只要您想保持锁定),请确保文件句柄保持打开状态。例如:

{
my $fh;
sub check_instances {
return if $fh; # We already checked
open $fh, '<', $0 or die $!;

unless (flock($fh, LOCK_EX|LOCK_NB)) {
print "$0 is already running. Exiting.\n";
exit 1;
}
}
} # end scope of $fh

这也是使用 state variable 的好地方,如果您需要 Perl 5.10。

关于perl - 如何确保一次只运行一个 Perl 脚本副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3966472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com