linux - 如何防止 Perl 脚本并行运行多次

标签 linux perl semaphore

我有一个可能会运行很长时间的脚本。在 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/

相关文章:

java - 如何在没有 GUI 的情况下同时运行多个 bash shell?

内存复制功能

c - C 中默认调度程序的 pthread 良好值设置

perl - 你如何最好地将 Perl 方法中的错误归因于调用者

python - perl 的哈希和 python 的字典之间的区别

perl - 为什么我的图像在使用此 Perl CGI 脚本时会被剪裁?

linux - sem_post() 因有效信号量而失败

concurrency - 为什么在假脱机模拟中为每个处理器使用信号量

php - 使用信号量在共享内存同步中嵌套锁定/自由调用

c - 如何检测端口是否已在 Linux 上的 C 中使用?