我是系统编程的新手,在 fork 和 vfork 中遇到了一些误解。
- 据我所知,fork 重复父进程的进程和子进程有自己的虚拟机和自己的文件描述符表。
- 至于vfork,它共享父进程的VM,但子进程将有自己的文件描述符表。
那么问题来了:
- 由于子进程共享父进程的地址,为什么它需要自己的文件描述符表?
- 如果我在子进程中声明一个变量,该变量将存储在哪里?(它会使用父进程的空间吗)非常感谢。
因为重定向stdin
和/或stdout
在调用exec
子进程之前很常见。如果它们共享同一个文件描述符表,这将修改父进程的 I/O。
您不应该在子进程中存储任何变量。vfork()
仅当您要立即调用exec
函数时才应使用。
请注意,这vfork()
在现代操作系统上已过时。他们使用写时复制,而不是复制地址空间。
有关更多信息,请参阅fork() 和 vfork() 之间的区别是什么?