2013-01-02 18 views
9

Jeśli piszę skrypt Perla, który nadpisuje STDERR duplikatem STDOUT, ale nigdy nie odtwarzam uchwytu pliku, co dzieje się na końcu wykonywania skryptu? Nie mogę znaleźć niczego, co ostrzega przed tym, co faktycznie występuje lub nie występuje.Co stanie się, jeśli nie zamkniesz uchwytu pliku w Perlu?

Jestem prawdopodobnie źle poinformowany, ale dzięki za cierpliwość.

Odpowiedz

12

Po zakończeniu procesu jądro odzyskuje wszystkie zużyte zasoby. Obejmuje to wszystkie deskryptory plików, które są po prostu zamknięte. Jeśli istnieje bufor na poziomie aplikacji, dane w tym buforze mogły nie zostać zapisane w jądrze, ale w przeciwnym razie nie ma ryzyka w utrzymywaniu otwartych deskryptorów plików przed ich wyjściem.

Jeśli skrypt Perla zostanie zakończony przez użycie exec w celu uruchomienia innego procesu, proces ten dziedziczy wszystkie deskryptory plików (z wyjątkiem tych oznaczonych jako close w exec).

+2

Perl normalnie zadba o opróżnienie własnych buforów w razie potrzeby, chyba że zrobisz coś głupiego, jak "zabij 9, $$". Chociaż wydaje się, że istnieją pewne drobne [pozostałe problemy z tym związane] (http://perldoc.perl.org/perlport.html#exec) na kilku platformach. –