【发布时间】:2020-05-29 07:01:24
【问题描述】:
来自 GNU 手册:
vfork() 函数与 fork(2) 具有相同的效果,除了如果由 vfork() 创建的进程修改了用于存储返回值的 pid_t 类型变量以外的任何数据,则行为未定义vfork(),
这是什么意思?是不是说vfork()的返回值不能赋值给非pid_t类型的变量?
【问题讨论】:
标签: vfork
来自 GNU 手册:
vfork() 函数与 fork(2) 具有相同的效果,除了如果由 vfork() 创建的进程修改了用于存储返回值的 pid_t 类型变量以外的任何数据,则行为未定义vfork(),
这是什么意思?是不是说vfork()的返回值不能赋值给非pid_t类型的变量?
【问题讨论】:
标签: vfork
手册对此非常混乱。实际上,两个进程(子进程和父进程)共享相同的地址空间,甚至是堆栈!
vfork() 两次返回:
fork()/vfork() 的返回码通常存储在一个变量中(pid_t 类型以遵循系统调用的概要):
pid_t pid = vfork();
由于我们在运行vfork()时父子共享地址空间,父子都修改了同一个变量!但是顺序设置为0在子进程中,在后者退出或执行程序后,该变量被第二次设置,但在父进程中使用子进程的 pid。
NB:manual 说:
vfork() 与 fork(2) 的不同之处在于调用线程被挂起 直到孩子终止(通常通过调用 _exit(2) 或 异常,在发出致命信号后),或者它调用 执行(2)。
【讨论】: