Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我用perl创建一个守护进程并将某些内容写入文件时,它失败了_Perl - Fatal编程技术网

当我用perl创建一个守护进程并将某些内容写入文件时,它失败了

当我用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:$!

我使用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:$!";
    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.非常感谢!看完你的链接文件后,我觉得很受益!非常感谢你!看完你的链接文件后,我觉得很受益!