当我使用fork()
创建子进程时,子进程是父进程的副本。每个进程中的指针是否都指向相同的事物,或者指针是否在子进程中采用新值。数组或文件指针怎么样?
最佳答案
每个进程中的指针是否都指向相同的东西。
是的,所有内存都被复制,包括指针。
数组或文件指针怎么样?
是的。对于文件描述符,请注意在父进程中打开的任何文件描述符都将引用子进程中的相同文件。
大多数(全部?)Unix 系统使用某种形式的写时复制优化,这意味着进程实际上将共享物理内存,直到它们中的任何一个写入内存为止。这往往使 fork() 成为一个相当便宜的操作。
正如 Vazquez-Abrams 指出的那样,存在一些极端情况。也许最重要的一点是只有一个线程被 fork ,即调用 fork() 系统调用的线程。
关于c - fork() 会创建别名吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39584201/