4

正如维基百科在此处所述:“进行生成调用时打开的文件在子进程中保持打开状态”。(非常类似于exec()

好的,操作系统已经打开了一些文件并为我们新出生的不知情的进程做好了准备。假设我们的进程不知道那些先前打开的文件并最终决定终止;而像 C 这样的编程语言需要在终止之前清理一些内部进程。

我的问题是,这种清理会以任何方式影响那些打开的文件吗?AFAIK 他们没有在任何地方注册,也没有在流程本身的任何地方注册。

答案应该以某种方式定义程序员在终止 spawn()ed 进程(甚至是 exec()ed 进程)时的行为。一个完整的清理程序会以任何方式伤害父母吗?(例如通过删除临时文件),因此程序员不应该使用_exit()而不是exit()吗?

4

1 回答 1

3

简短的回答:没有。C 运行时不会关闭在进程退出时打开的文件句柄,因此您可以从父进程或子进程退出,而不必担心弄乱另一个。

一旦没有对它的打开引用,内核负责关闭文件句柄,这发生在内核销毁进程时。内核可以很好地处理这种情况。

于 2011-04-08T12:38:01.300 回答