0

这是我的守护程序代码的一部分:

package somepackage;

use Proc::Daemon;
use Time::HiRes qw/usleep/;
use constant{
  LOGFILE => '/var/log/.../work.log'
};

our $LOG;

unless($pid)
  {
  open($LOG,'>>'.LOGFILE);
  my $tm;
  }

while ($pid == 0)
  {

  $tm=usleep(999940); #to be more accurate, 1 sec
  print $somepackage::LOG $tm."\n";

  }

但问题是,有时打印写入文件仅在假设 10 秒后才写入文件。我知道为什么会发生这种情况,因为在 print 写入文件时循环不会等待,而是会进入一个新循环然后休眠。当 print 完成写入文件然后进入下一次迭代时,我该如何等待?

4

1 回答 1

2

我想你说的是冲洗。在您打开日志后立即
调用一次。 (您可能还需要添加)。$LOG->autoflush(1)
use IO::Handle

于 2011-04-20T11:13:13.593 回答