我有一个 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 一样?
我知道如果我从 tty 运行,我可以使用“/dev/tty”(但我是从 cron 运行并取决于其他地方的标准输出)。我还阅读了可以将 STDOUT 放在一边的技巧open SAVEOUT,">&STDOUT"
,但是仅制作此副本的行为并不能解决留下僵尸的原始问题。
我正在寻找是否有一些魔法open STDOUT,"|-"
(我知道不是)以应该打开的方式打开 STDOUT。