У меня есть Perl script, который развивает и демонзирует себя. Он управляется 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 в сторону open SAVEOUT,">&STDOUT"
, но только акт создания этой копии не решает исходную проблему оставления зомби.
Я хочу посмотреть, есть ли какая-то магия, вроде open STDOUT,"|-"
(которая, как я знаю, не так), чтобы открыть STDOUT так, как она должна быть открыта.