我有一个Perl脚本,它自己强制和守护进程。它是由cron运行的,所以为了不会在僵尸周围离开,我关闭STDIN,STDOUT和STDERR:
open STDIN,'/dev/null' or die "Can't read /dev/null: $!"; open STDOUT,'>>/dev/null' or die "Can't write to /dev/null: $!"; open STDERR,'>>/dev/null' or die "Can't write to /dev/null: $!"; if (!fork()) { do_some_fork_stuff(); }
我的问题是:我想在此之后恢复至少STDOUT(恢复其他2将是很好的)。但是我需要使用什么魔法符号来重新打开STDOUT,就像STDOUT过去那样呢?
我知道我可以使用“/ dev / tty”,如果我从一个tty运行(但是我从cron运行,并且依赖于别的stdout)。我也读了一些技巧,你可以把STDOUT放在一边打开SAVEOUT,“>& STDOUT”,但只是这个拷贝的行为并不能解决原本的僵尸离开的问题。
我想看看是否有一些像开放式STDOUT这样的魔法,“| – ”(我不知道这样)打开STDOUT应该被打开的方式。
解决方法
如果仍然有用,可以考虑两件事:
>您可以在子进程中关闭STDOUT / STDERR / STDIN(即if(!fork()),这样允许父进程仍然使用它们,因为它们仍然在那里打开。
>我想你可以使用更简单的关闭(STDOUT)而不是打开它到/ dev / null。
例如:
if (!fork()) { close(STDIN) or die "Can't close STDIN: $!\n"; close(STDOUT) or die "Can't close STDOUT: $!\n"; close(STDERR) or die "Can't close STDERR: $!\n"; do_some_fork_stuff(); }
原文地址:https://www.jb51.cc/Perl/172984.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。