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

编程入门 行业动态 更新时间:2024-10-12 20:25:53
本文介绍了如何确保一次只运行一个Perl脚本副本?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我需要确保一次只运行我的Perl脚本的一个副本.根据此处的建议,我写了一个子代码进行检查:

I need to ensure that only one copy of my Perl script is running at a time. According to the suggestions here I wrote a sub to do the check:

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; } }

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

But it doesn't work. What can be the issue?

推荐答案

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

You're using a lexical filehandle scoped inside the sub. When check_instances returns, the filehandle is automatically closed, which releases the lock. So you'll never see a conflict unless two copies check at exactly the same time.

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

Ensure that the filehandle remains open as long as the script is running (or as long as you want to maintain the lock). For example:

{ 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变量,这也是一个好地方.您可以要求使用Perl 5.10.

This would also be a good place to use a state variable, if you can require Perl 5.10.

更多推荐

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

本文发布于:2023-05-28 00:44:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/308165.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:副本   脚本   Perl

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!