gpt4 book ai didi

linux - 使用 PID 在 perl 中拖尾一个文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:00 25 4
gpt4 key购买 nike

我需要检查日志文件,直到 PID 在 perl 中处于事件状态。它在 bash 中运行良好。

tail -f --pid=1234 logfile.log

现在我需要对 perl 做同样的事情,通过检查 PID 或给出时间间隔来检查日志文件也对我有用。

我正在使用以下代码在 perl 中执行此操作,但我能够拖尾一个文件并在其中有两个问题。

1) 文件尾部不会立即发生。

2) 我想在几秒后关闭尾部,比如 100。

use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);
my ($found,$timeleft,@pending) = File::Tail::select(undef,undef,undef,100,$file);

if ($found)
{
print $pending[0]->read;
}

我正在使用上面的代码,它会在 2 秒内退出。我正在寻找一个文件,就像 linux 中的 tailf 命令一样,以便在给定的时间后退出。

谢谢。

最佳答案

来自 the documentation :

The module tries very hard NOT to "busy-wait" on a file that has little traffic. Any time it reads new data from the file, it counts the number of new lines, and divides that number by the time that passed since data were last written to the file before that. That is considered the average time before new data will be written. When there is no new data to read, File::Tail sleeps for that number of seconds. Thereafter, the waiting time is recomputed dynamicaly. Note that File::Tail never sleeps for more than the number of seconds set by maxinterval.

因此,如果您想让它立即看到更新,您需要将 maxinterval 设置为一个较小的数字。

更新:超时,使用select。这个简单的示例对文件进行了一次 100 秒的检查。它还至少每五秒钟检查一次文件。有关使用循环的更复杂示例,请参阅上述文档。

use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);
my ($found,$timeleft,@pending) = File::Tail::select(undef,undef,undef,100,$file);

if ($found)
{
print $pending[0]->read;
}

更新:这是一个循环的解决方案,它将在您的整个时间间隔内持续进行:

use warnings;
use strict;
use File::Tail;
my $name='/tmp/out';
my $file=File::Tail->new(name=>$name,interval=>1,maxinterval=>5,adjustafter=>1);

my $time = 60;

while ($time > 0)
{
my ($found,@pending);
($found,$time,@pending) = File::Tail::select(undef,undef,undef,$time,$file);

if ($found)
{
print $_->read for @pending;
}
}

关于linux - 使用 PID 在 perl 中拖尾一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13470773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com