维基百科指出here:“在 spawn 调用时打开的文件在子进程中保持打开状态”。 (非常类似于 exec())
好的,操作系统已经打开了一些文件。为我们新生的不知情的过程做好准备。假设我们的进程不知道那些先前打开的文件并最终决定终止;而像C这样的编程语言需要在终止之前清理一些内部进程。
我的问题是,这种清理是否会以任何方式影响这些打开的文件? AFAIK它们没有在任何地方注册,也没有在流程内部注册任何内容。
答案应该以某种方式定义程序员的行为,同时终止spawn()ed进程(甚至是exec()ed进程)。完全清理程序能否以任何方式伤害父母? (例如删除临时文件)因此程序员不应该使用 _exit()而不是 exit()?
答案 0 :(得分:3)
简短回答:不。 C运行时不会关闭在进程退出时打开的文件句柄,因此您可以退出父进程或子进程,而不必担心弄乱另一个进程。
内核负责在没有对它的开放引用时关闭文件句柄,这在内核销毁进程时会发生。内核可以很好地处理这种情况。