Comment puis-je réinitialiser STDIN / STDOUT / STDERR de Perl?

J'ai un script Perl qui fourches et daemonizes lui-même. Il est exécuté par cron, donc, afin de ne pas laisser un zombie autour, j'ai arrêté de STDIN,STDOUT, et 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();
  }

La question que je me pose est la suivante: je voudrais restaurer au moins STDOUT après ce point (il serait bon de rétablir les 2 autres). Mais ce que la magie des symboles dois-je utiliser pour re-ouvrir STDOUT comme ce STDOUT l'habitude d'être?

Je sais que je pourrais utiliser "/dev/tty" si j'ai été l'exécution d'un ats (mais je suis en cours d'exécution de cron et selon stdout ailleurs). J'ai aussi lu des trucs où vous pouvez mettre STDOUT de côté avec open SAVEOUT,">&STDOUT"mais juste le fait de rendre cette copie ne résout pas le problème initial de laisser un zombie autour de.

Je suis à la recherche pour voir si il y a un peu de magie comme open STDOUT,"|-" (qui je le sais n'est-ce pas) pour ouvrir la sortie standard de la façon dont il est censé être ouvert.

source d'informationauteur Josh