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