我在perl腳本中分叉並在fork()
之後從父進程退出。 在子進程,那麼我在一個函數在perl中自動刪除子進程中的臨時文件
my ($S_TEMP_FILE, $stmpfile) = tempfile(UNLINK => 1, DIR => $TMPDIR);
創建通過這種方法臨時文件現在的問題是,這個臨時文件是沒有得到自動當我從函數退出刪除。我也在分叉之前創建了一些臨時文件,但是它們在函數退出時會自動刪除。我已經瀏覽了所有關於此的鏈接,但我無法弄清楚這種行爲的原因。
我在perl腳本中分叉並在fork()
之後從父進程退出。 在子進程,那麼我在一個函數在perl中自動刪除子進程中的臨時文件
my ($S_TEMP_FILE, $stmpfile) = tempfile(UNLINK => 1, DIR => $TMPDIR);
創建通過這種方法臨時文件現在的問題是,這個臨時文件是沒有得到自動當我從函數退出刪除。我也在分叉之前創建了一些臨時文件,但是它們在函數退出時會自動刪除。我已經瀏覽了所有關於此的鏈接,但我無法弄清楚這種行爲的原因。
由tempfile
創建的文件「在程序退出時自動刪除」,而不是某些子程序退出時。
請注意,如果程序調用_exit
或者它被信號殺死,程序將不會有機會刪除這些文件。
如果您希望該文件被更快刪除,您需要自行刪除它或使用File::Temp->new()
而不是tempfile
。 (由File::Temp->new()
創建的文件將在對象被銷燬時被刪除。)
感謝您的幫助。通過這兩種方法創建臨時文件還有什麼特別的區別嗎? –
這是唯一的一個 – ikegami
@SanchitaGhai:請考慮接受答案,如果它解決了您的問題。請參閱:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –
請添加一個[mcve],其中包括在父進程和子進程中的分叉和創建。 – simbabque