vfork 与 fork 的文件描述符 table
File descriptor table for vfork vs. fork
我是系统编程新手,在fork和vfork中遇到了一些误区
- 据我所知,fork 重复父进程的进程和子进程有自己的 VM 和自己的文件描述符 table。
- 至于 vfork,它共享父进程的 VM,但子进程将有自己的文件描述符 table。
那么问题来了:
- 因为子进程共享父进程的地址,为什么它需要自己的文件描述符table?
- 如果我在子进程中声明一个变量,变量将存储在哪里? (会不会使用父进程的space)
非常感谢。
因为在子进程中调用exec
之前重定向stdin
and/orstdout
是很常见的。如果它们共享相同的文件描述符 table,这将修改父进程的 I/O.
您不应在子进程中存储任何变量。 vfork()
仅应在您要立即调用 exec
函数时使用。
请注意,vfork()
在现代操作系统上已过时。他们使用 copy-on-write.
而不是复制地址 space
有关详细信息,请参阅 What is the difference between fork() and vfork()?
我是系统编程新手,在fork和vfork中遇到了一些误区
- 据我所知,fork 重复父进程的进程和子进程有自己的 VM 和自己的文件描述符 table。
- 至于 vfork,它共享父进程的 VM,但子进程将有自己的文件描述符 table。
那么问题来了:
- 因为子进程共享父进程的地址,为什么它需要自己的文件描述符table?
- 如果我在子进程中声明一个变量,变量将存储在哪里? (会不会使用父进程的space) 非常感谢。
因为在子进程中调用
exec
之前重定向stdin
and/orstdout
是很常见的。如果它们共享相同的文件描述符 table,这将修改父进程的 I/O.您不应在子进程中存储任何变量。
vfork()
仅应在您要立即调用exec
函数时使用。
请注意,vfork()
在现代操作系统上已过时。他们使用 copy-on-write.
有关详细信息,请参阅 What is the difference between fork() and vfork()?