来自 GNU 手册:
vfork() 函数与 fork(2) 具有相同的效果,除了如果由 vfork() 创建的进程修改任何数据而不是用于存储来自 vfork() 的返回值的 pid_t 类型的变量,则行为未定义,
这是什么意思?这是否意味着 的返回值vfork()
不能分配给非pid_t
类型变量?
来自 GNU 手册:
vfork() 函数与 fork(2) 具有相同的效果,除了如果由 vfork() 创建的进程修改任何数据而不是用于存储来自 vfork() 的返回值的 pid_t 类型的变量,则行为未定义,
这是什么意思?这是否意味着 的返回值vfork()
不能分配给非pid_t
类型变量?
该手册对此感到非常困惑。实际上,两个进程(子进程和父进程)共享相同的地址空间,甚至是堆栈!
vfork()
返回两次:
的返回码fork()/vfork()
通常存储在一个变量中(类型pid_t
遵循系统调用的概要):
pid_t pid = vfork();
vfork()
由于在运行时父子共享地址空间,所以父子都修改了同一个变量!但是在子进程中它被顺序设置为0,并且在后者退出或执行程序后,该变量被第二次设置,但在父进程中使用子进程的pid。
注意:手册说:
vfork() 与 fork(2) 的不同之处在于调用线程被挂起,直到子进程终止(正常情况下,通过调用 _exit(2),或异常情况下,在传递致命信号后),或者调用 execve( 2)。