正如维基百科这里所述:“当调用spawn时打开的文件会在子进程中保持打开状态”。(与exec()相似)
操作系统已经打开并准备好一些文件,供新生的不知情的进程使用。假设我们的进程不知道先前打开的文件,并最终决定终止;而像C这样的编程语言要求在终止之前进行一些内部进程清理。
我的问题是,这种清理是否会以任何方式影响那些已打开的文件? 据我所知,它们没有在进程本身内部的任何地方注册或记录。
答案应该在定义程序员终止spawn()进程(甚至是exec()进程)时的行为。完整的清理过程是否会以任何方式损害父进程?(例如删除临时文件),因此程序员是否应该使用_exit()而不是exit()?
操作系统已经打开并准备好一些文件,供新生的不知情的进程使用。假设我们的进程不知道先前打开的文件,并最终决定终止;而像C这样的编程语言要求在终止之前进行一些内部进程清理。
我的问题是,这种清理是否会以任何方式影响那些已打开的文件? 据我所知,它们没有在进程本身内部的任何地方注册或记录。
答案应该在定义程序员终止spawn()进程(甚至是exec()进程)时的行为。完整的清理过程是否会以任何方式损害父进程?(例如删除临时文件),因此程序员是否应该使用_exit()而不是exit()?
tmpfile
不是问题。在*nix系统上,可以写入已删除的文件--对已删除文件的句柄保持打开状态,并且直到关闭最后一个句柄才会删除文件的inode。在Windows上,无法删除具有打开句柄的文件,C库将通过将tmp句柄标记为子进程中的非临时或者在尝试关闭文件时忽略遇到的错误来处理此条件。 - JSBձոգչtmpfile
会在打开文件时立即删除它。或者至少,我希望所有真实世界的实现都是这样做的。 - R.. GitHub STOP HELPING ICE