我使用编写了一个简单的测试守护进程过程::守护进程 http://search.cpan.org/~deti/Proc-Daemon-0.14/lib/Proc/Daemon.pod。这是守护进程:
#!/usr/bin/perl
use Proc::Daemon;
$daemon = Proc::Daemon->new(
work_dir => '/scripts/',
child_STDOUT => '/scripts/child.log',
child_STDERR => '+>>debugchild.txt',
pid_file => 'pid.txt',
exec_command => 'perl /scripts/test.pl'
);
foreach(@ARGV)
{
if ( /install/i )
{
$Kid_1_PID = $daemon->Init;
}
elsif (/remove/i)
{
$stopped = $daemon->Kill_Daemon();
}
}
这是它执行的测试:
#!/usr/local/bin/perl
while (1) {
print "test\n";
sleep(1);
}
while 循环仅使用 print 语句就可以正常工作,但是当我添加 sleep(); 时日志是空的。为什么会这样呢?
Perl 不会自动刷新缓冲区,因此您对文件的写入只会在相当长的一段时间后发生。当您没有睡眠时,由于写入的数据量很大,您的缓冲区几乎会自动刷新。
尝试这个:
$| = 1;
while (1) {
print "test\n";
sleep(1);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)