2016-09-19 5 views
1

Ich verzweige in einem Perl-Skript und Beenden des übergeordneten Prozesses nach fork(). In untergeordnetem Prozess, dann temporäre Dateien mit dieser MethodeAutomatisches Löschen von temporären Dateien im untergeordneten Prozess in Perl

my ($S_TEMP_FILE, $stmpfile) = tempfile(UNLINK => 1, DIR => $TMPDIR); 

Jetzt ist die Frage in einer Funktion Ich verursache, dass diese temporäre Datei wird nicht automatisch gelöscht wird, wenn ich von der Funktion bin verlassen. Ich habe einige temporäre Dateien vor der Verzweigung auch erstellt, aber sie werden automatisch beim Beenden von Funktionen gelöscht. Ich habe alle diesbezüglichen Links durchgelesen, aber ich bin nicht in der Lage, den Grund für dieses Verhalten herauszufinden.

+8

Fügen Sie einen [mcve] hinzu, der Forking und Erstellung sowohl im übergeordneten als auch im untergeordneten Prozess enthält. – simbabque

Antwort

3

Dateien, die von tempfile erstellt wurden, werden beim Beenden des Programms automatisch entfernt, nicht wenn eine Subroutine beendet wird.

Beachten Sie, dass das Programm keine Möglichkeit zum Löschen dieser Dateien erhält, wenn das Programm _exit aufruft oder wenn es durch ein Signal getötet wird. Wenn Sie möchten, dass die Datei früher gelöscht wird, müssen Sie sie selbst löschen oder File::Temp->new() anstelle von tempfile verwenden. (Dateien, die von File::Temp->new() erstellt wurden, werden gelöscht, wenn das Objekt zerstört wird.)

+0

Danke für die Hilfe. Gibt es auch einen bestimmten Unterschied zwischen dem Erstellen von temporären Dateien mit diesen beiden Methoden? –

+0

Das ist der einzige – ikegami

+0

@SanchitaGhai: Bitte in Betracht ziehen, die Antwort zu akzeptieren, wenn es Ihr Problem gelöst hat. Siehe: http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

Verwandte Themen