Perl 缓冲区刷新
Posted
技术标签:
【中文标题】Perl 缓冲区刷新【英文标题】:Perl buffer flushing 【发布时间】:2013-07-17 06:07:56 【问题描述】:我有两个单独的脚本,我尝试使用诸如 open($fh, '-|', "./monitor 之类的管道机制从另一个脚本(父进程)启动一个脚本(子进程)的执行.pl") 这里的 monitor.pl 是子进程,因此它们都异步同时执行。由于这个原因缓冲区被填满,放置在子进程的while循环内的命令的输出被连续写入管道句柄。所以请建议我刷新缓冲区的机制和适当的位置,这样子进程就不会在缓冲区填满时挂起。
【问题讨论】:
你在读$fh在父进程吗? 是的,在父进程中读取 $fh。请。你能建议我任何机制吗? 那么孩子提供数据的速度比父母读取和处理数据的速度快吗? 可能……不确定………… 好吧,如果是这种情况,那么您需要在父母和孩子之间有一些东西可以缓冲孩子的输出。当然,这只有在某些时期孩子没有产生更少的输出时才有效...... 【参考方案1】:见IO::Handle。
写入后自动刷新:
$fh->autoflush(1);
手动冲洗:
$fh->flush;
在低于 5.14
的 Perl 版本上,您还需要加载 IO::Handle 模块:
use IO::Handle qw();
【讨论】:
我应该在哪里使用这个语句 $fh->autoflush(1);就在像这样打开管道之后code
open($fh, '-|', "./monitor.pl"); $fh->自动刷新(1); code
上述机制在我的脚本场景中不起作用。子进程monitor.pl的执行是通过使用来自父进程的管道机制open($fh, '-|', "./monitor.pl") 来启动的。父进程可能会执行几个小时,子进程也必须执行,只要父进程异步执行但子进程在 50 分钟后挂起。我希望只要父进程执行可能需要 2-3 个小时,子进程就应该写入管道句柄。请。建议我任何可以帮助我的机制。提前致谢。
7Srv, open a new topic 与您的后续问题的文本。以上是关于Perl 缓冲区刷新的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Perl 将输入通过管道传输到 Java 应用程序?