当我用perl创建一个守护进程并将某些内容写入文件时,它失败了
我使用daemonize创建一个守护进程,然后向名为log的文件中写入一些内容, 但当我运行它时,它不起作用 为什么我不能写日志当我用perl创建一个守护进程并将某些内容写入文件时,它失败了,perl,Perl,我使用daemonize创建一个守护进程,然后向名为log的文件中写入一些内容, 但当我运行它时,它不起作用 为什么我不能写日志 use POSIX; sub daemonize{ chdir '/'; umask 0; open STDIN,'/dev/null' || die "can not open /dev/null:$!"; open STDOUT,'>/dev/null' || die "can not open /dev/null:$!
use POSIX;
sub daemonize{
chdir '/';
umask 0;
open STDIN,'/dev/null' || die "can not open /dev/null:$!";
open STDOUT,'>/dev/null' || die "can not open /dev/null:$!";
open STDERR,'>/dev/null' ||die "can not open /dev/null:$!";
defined ($pid=fork) || die "can not fork a process:$!";
exit if $pid;
setsid || die "can not create session:$!";
}
&daemonize;
open LOG,">>/dev02/ycq/test/log" ||die "can not open file:$!";
my $num=0;
while(1){
print LOG "$num\n";
sleep 1;
}
当使用open或任何其他函数或子例程时,需要考虑。在本例中,| |运算符的优先级高于逗号运算符
您的线条如下所示:
open LOG, "file.txt" ||die "can not open file:$!";
实际上,当考虑到优先级时,这意味着:
open LOG, ("file.txt || die ...);
因为file.txt是一个true语句,所以它永远不会触发die语句
您需要的是:
open(LOG, "file.txt") || die ...
或
在第一种情况下,paren覆盖运算符优先级,在第二种情况下,or运算符的优先级低于逗号运算符
所有这一切都意味着,您的open调用可能在静默状态下失败。在使用open或任何其他函数或子例程时,您需要考虑以下因素。在本例中,| |运算符的优先级高于逗号运算符
您的线条如下所示:
open LOG, "file.txt" ||die "can not open file:$!";
实际上,当考虑到优先级时,这意味着:
open LOG, ("file.txt || die ...);
因为file.txt是一个true语句,所以它永远不会触发die语句
您需要的是:
open(LOG, "file.txt") || die ...
或
在第一种情况下,paren覆盖运算符优先级,在第二种情况下,or运算符的优先级低于逗号运算符
所有这一切都意味着,您的打开的调用可能在静默中失败。可能是因为chdir'/'中有一个额外的空间。也可能是因为chdir'/'中有一个额外的空间。您到底遇到了什么错误?你可能是 您应该使用open的3参数形式 你的chdir不会把你放在你想的地方;您已经用前导空格写了“/”
您可能也会发现有用的信息。您会发现哪些错误?你可能是 您应该使用open的3参数形式 你的chdir不会把你放在你想的地方;您已经用前导空格写了“/”
您可能也会发现它很有用。仅供参考,它不起作用是一个非常糟糕的问题描述。如果没有错误,没有输出,等等,明确地说。这样我们就不必要求您指定。仅供参考,它不起作用是一个非常糟糕的问题描述。如果没有错误,没有输出,等等,明确地说。这样我们就不必要求你指定了。谢谢你的帮助……正如你所说的,我不考虑优先权。也许是关于Buffer-Read。谢谢你的帮助……正如你所说的,我不考虑优先权。也许是关于Buffel.非常感谢!看完你的链接文件后,我觉得很受益!非常感谢你!看完你的链接文件后,我觉得很受益!