【发布时间】:2015-02-10 13:13:13
【问题描述】:
我有一个可能会运行很长时间的脚本。在 Linux 上。在它运行时,当同一个或不同的用户第二次调用它时,它应该检测到并拒绝运行。我试图弄清楚如何创建一个合适的信号量,即使进程由于某种原因而死,也会被清理掉。
我遇到了How to prevent PHP script running more than once?,这当然可以应用,但我想知道这是否可以在 Perl 中做得更好。
例如,Perl 具有“在进程退出时清理创建的临时文件”标志 (File::Temp::CLEANUP),我相信无论进程如何结束都会触发该标志。但是这个 API 只能用于创建具有随机名称的临时文件,因此它不能用作信号量的文件名。我不了解如何删除文件的底层机制,但听起来该机制存在。我将如何为命名文件执行此操作,例如/var/run/foobar?
或者有更好的方法吗?
【问题讨论】:
-
我会做与 PHP 完全相同的操作:创建一个锁定文件。