我有一个可能会运行很长时间的脚本。在 Linux 上。当它运行时,当由相同或不同的用户第二次调用时,它应该检测到并拒绝运行。我正在尝试弄清楚如何创建一个合适的信号量,即使进程由于某种原因终止,它也会被清理。
我遇到了 How to prevent PHP script running more than once?这当然可以应用,但我想知道这是否可以在 Perl 中做得更好。
例如,Perl 具有“在进程退出时清理创建的临时文件”标志 (File::Temp::CLEANUP),我相信无论进程如何结束,它都会触发。但是此 API 只能用于创建具有随机名称的临时文件,因此它不能用作信号量的文件名。我不了解如何删除文件的底层机制,但听起来该机制是存在的。我将如何为命名文件执行此操作,例如/var/run/foobar?
或者有更好的方法吗?
最佳答案
use strict;
use warnings;
use Fcntl ':flock';
flock(DATA, LOCK_EX|LOCK_NB) or die "There can be only one! [$0]";
# mandatory line, flocking depends on DATA file handle
__DATA__
关于linux - 如何防止 Perl 脚本并行运行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27433252/