2016-09-19 75 views
1

我在perl脚本中分叉并在fork()之后从父进程退出。 在子进程,那么我在一个函数在perl中自动删除子进程中的临时文件

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

创建通过这种方法临时文件现在的问题是,这个临时文件是没有得到自动当我从函数退出删除。我也在分叉之前创建了一些临时文件,但是它们在函数退出时会自动删除。我已经浏览了所有关于此的链接,但我无法弄清楚这种行为的原因。

+8

请添加一个[mcve],其中包括在父进程和子进程中的分叉和创建。 – simbabque

回答

3

tempfile创建的文件“在程序退出时自动删除”,而不是某些子程序退出时。

请注意,如果程序调用_exit或者它被信号杀死,程序将不会有机会删除这些文件。

如果您希望该文件被更快删除,您需要自行删除它或使用File::Temp->new()而不是tempfile。 (由File::Temp->new()创建的文件将在对象被销毁时被删除。)

+0

感谢您的帮助。通过这两种方法创建临时文件还有什么特别的区别吗? –

+0

这是唯一的一个 – ikegami

+0

@SanchitaGhai:请考虑接受答案,如果它解决了您的问题。请参阅:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –