无法让Perl的群体工作

无法让Perl的群体工作,第1张

概述我似乎无法制作Perl的 flock工作. 我正在锁定一个文件,检查返回值以确保它实际上已被锁定,而且我仍然可以打开并写入它,就像没有任何事情一样. 这是我如何锁定文件 #!/usr/bin/perl -wuse strict;use Fcntl ':flock';$| = 1;my $f = $ARGV[0];open( my $fh, '>>', $f ) or die " 我似乎无法制作Perl的
flock工作.
我正在锁定一个文件,检查返回值以确保它实际上已被锁定,而且我仍然可以打开并写入它,就像没有任何事情一样.

这是我如何锁定文件

#!/usr/bin/perl -wuse strict;use Fcntl ':flock';$| = 1;my $f = $ARGV[0];open( my $fh,'>>',$f ) or dIE "Could not open '$f' - $!";print "locking '$f'...";flock($fh,LOCK_EX) or dIE "Could not lock '$f' - $!";print "locked\n";sleep 10;print "waking up and unlocking\n";close( $fh );

当该脚本处于休眠状态时,我可以使用来自不同进程的相同文本文件

#!/usr/bin/perl -wuse strict;my $f = $ARGV[0];open( my $fh,$f ) or dIE "Could not open '$f' - $!";print $fh "This line was appended to a locked file!\n";close( $fh );

为什么我能够打开文件并写入文件而不被告知它被锁定?

解决方法 flock()是一个咨询锁.你必须使用flock()拥有所有进程

还要意识到你调用flock()的方式会阻塞,直到它可以锁定.如果您想要失败,您还必须使用LOCK_NB标志.

open(my $lf,">>fileIWantTolockOn");my $gotLock = flock($lf,LOCK_EX | LOCK_NB);unless ($gotLock){    print "Couldn't get lock. Exiting";    exit 0;}

编辑:另请注意,flock()将无法在NFS上运行

总结

以上是内存溢出为你收集整理的无法让Perl的群体工作全部内容,希望文章能够帮你解决无法让Perl的群体工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1268569.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存