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 に答える