Perl Linux::Inotify2 - 不能再响应事件了

Posted

技术标签:

【中文标题】Perl Linux::Inotify2 - 不能再响应事件了【英文标题】:Perl Linux::Inotify2 - can't respond to events anymore 【发布时间】:2011-02-12 07:08:58 【问题描述】:

当我使用Linux::Inotify2 模块来查看任何新创建文件的目录时,我遇到了一些非常奇怪的行为。

我制作了一个测试脚本来看看它是如何工作的,一旦完成,我就继续将它的用法合并到其他脚本中,但它在其中不起作用。然后,当我再次尝试我之前的测试脚本以查找一些信息时,奇怪的是它也停止了工作。从那以后它就没有工作了。在此期间没有软件包/发行版升级。

问题在于它已停止响应事件。这是测试脚本:

#!/usr/bin/perl

use strict;
use warnings;

use Linux::Inotify2;

my $inotify = new Linux::Inotify2 or die "unable to create new inotify object: $!";

my $dir = "/my/dir";

$inotify->watch($dir, IN_CREATE, sub 
    my $e = shift;
    print $e->fullname;
) or die " Can't watch $!";

1 while $inotify->poll;

正在运行的脚本上的 strace 会终止该脚本。否则,当启动脚本时使用 strace 时,它​​似乎确实读取了新事件,但对这些事件没有响应。有什么建议可以进一步调试吗?

【问题讨论】:

【参考方案1】:

我忘记设置 $|。

【讨论】:

以上是关于Perl Linux::Inotify2 - 不能再响应事件了的主要内容,如果未能解决你的问题,请参考以下文章

为啥inotify会丢失事件?

Linux::Inotify2 和线程

在 perl 中使用 inotify 监视多个文件

在后台运行的单个 perl 脚本可以保存多个 Log4Perl 实例吗?

perl tk将界面输入的汉字不能输出到读取的EXCEL表格

为啥这个 ISQL 命令不能通过 Perl 的 DBI 运行?