正如wikipedia在这里所述:"当spawn调用被打开时,文件在子进程中保持打开状态"。(非常类似于exec())
OK,操作系统保持一些文件打开&准备好迎接我们新生的无意识过程。假设我们的进程仍然不知道那些先前打开的文件,并最终决定终止;而像C这样的编程语言需要在终止之前清理一些内部进程。
我的问题是,这种清理是否会以任何方式影响那些打开的文件?它们没有在进程本身的任何地方或任何地方注册。
答案应该以某种方式定义程序员在终止spawn()进程(甚至是exec()进程)时的行为。一个完整的清理过程会以任何方式伤害父母吗?(例如通过删除临时文件),因此程序员不应该使用_exit()而不是exit()吗?
短答:没有。C运行时不会关闭在进程退出时打开的文件句柄,因此您可以退出父进程或子进程,而不必担心混淆另一个进程。
内核负责在没有打开的文件句柄时关闭它,这发生在内核销毁进程时。内核可以很好地处理这种情况。