【发布时间】:2013-12-22 18:49:34
【问题描述】:
我有 5 个 perl 脚本,并且想确保如果有人运行其中一个脚本并同时尝试运行另一个脚本,那么第二个脚本将终止并显示另一个脚本正在运行的消息
我在其他 stackoverflow 上看到这种机制处理一个实例: What's the best way to make sure only one instance of a Perl program is running?
use Fcntl ':flock';
open my $self, '<', $0 or die "Couldn't open self: $!";
flock $self, LOCK_EX | LOCK_NB or croak "This script is already running";
我的问题是有一个选项可以构建某种机制来确保只有一个脚本在 Windows 上运行,而无需在所有脚本上锁定外部文件?
【问题讨论】:
-
恕我直言,您最好的选择是使用所有程序共享的外部文件。第一个创建文件,只要它在那里,其他人要么等待或停止。
-
我想过这个选项我只是想知道是否还有其他选项可以隐藏这个文件,比如使用内存映射文件:search.cpan.org/~leont/File-Map-0.61/lib/File/Map.pm 或任何其他想法
-
这看起来只适用于分叉或线程。但是你说你有五个不同的程序,你想确保只有一个运行。我不认为 File::Map 可以在那里提供帮助。不同的程序(甚至可能不会同时运行)应该如何知道它们应该共享的内存位置以便检查?
-
我只是想知道是否可以选择
-
我认为使用锁定文件将是最好的方法。如果您不希望用户看到它,您可以设置隐藏标志,因为您在 Windows 中。我知道这并不完美,但这是一个好的开始。
标签: perl