在Perl中有一种方法可以判断Windows中的perl进程是否正在使用特定文件

时间:2013-11-26 20:06:17

标签: perl activestate windows-process

希望这是一个快速的问题,有人可以指出我正确的方向。

背景资料: 我有一个转换为exe的perl脚本在Windows中运行。 script.exe会读取并有时更新配置文件config.ini Script.exe是使用指定config.ini文件位置的行arg执行的 或者它可以使用out arg运行,并且默认为config.ini文件的默认位置

目标: 使用相同的config.ini文件阻止script.exe多次执行。

任何建议或提示将不胜感激。

由于

MM

1 个答案:

答案 0 :(得分:2)

在配置文件中使用flock

use Fcntl qw( LOCK_EX LOCK_NB );

open(my $config_fh, '<', $config_qfn)
   or die("Can't open config file \"$config_qfn\": $!\n");

if (!flock($config_fh, LOCK_EX | LOCK_NB)) {
   if ($!{EWOULDBLOCK}) {
      die("Config file $config_qfn already in use\n");
   }

   die("Error trying to lock the config file: $!\n");
}

... # Rest of program. Don't close $config_fh