c - fork() 会创建别名吗?

标签 c linux operating-system fork

当我使用fork()创建子进程时,子进程是父进程的副本。每个进程中的指针是否都指向相同的事物,或者指针是否在子进程中采用新值。数组或文件指针怎么样?

最佳答案

每个进程中的指针是否都指向相同的东西。

是的,所有内存都被复制,包括指针。

数组或文件指针怎么样?

是的。对于文件描述符,请注意在父进程中打开的任何文件描述符都将引用子进程中的相同文件。


大多数(全部?)Unix 系统使用某种形式的写时复制优化,这意味着进程实际上将共享物理内存,直到它们中的任何一个写入内存为止。这往往使 fork() 成为一个相当便宜的操作。

正如 Vazquez-Abrams 指出的那样,存在一些极端情况。也许最重要的一点是只有一个线程被 fork ,即调用 fork() 系统调用的线程。

关于c - fork() 会创建别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584201/

相关文章:

c - 变长多维数组

C - 想要使用符号转换大小写字母

linux - sigprocmask 导致主进程卡住

linux - 如何将 bash 脚本作为命令运行?

linux - 使用任何东西作为 sed 或 Perl 正则表达式的输入?

C 最佳实践,堆栈与堆分配

c - 从文件读取到 C 中的 float** 内存块

c - 写超出程序中断

operating-system - 如何从 FreeBSD VFS vnode 读取实际文件数据?

c - 关于 pthread_kill() 行为