首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回vfork()类型

返回vfork()类型
EN

Stack Overflow用户
提问于 2020-05-29 07:01:24
回答 1查看 53关注 0票数 0

来自GNU手册:

函数具有与fork(2)相同的效果,但如果由vfork()创建的进程修改pid_t类型的变量以外的任何数据,则行为是未定义的,该变量用于存储vfork()的返回值,

什么意思?这是否意味着vfork()的返回值不能分配给非pid_t类型的变量?

EN

回答 1

Stack Overflow用户

发布于 2020-11-05 11:41:45

这方面的手册很混乱。实际上,两个进程(子进程和父进程)共享相同的地址空间,甚至堆栈!

vfork()返回两次:

  1. 在子进程中,返回0
  2. 当子进程完成或执行其他程序时,将在父进程中使用子进程标识符进行第二次返回。与此同时,父亲程序被暂停。

fork()/vfork()的返回代码通常存储在一个变量中(类型为pid_t,以遵循系统调用的概要):

代码语言:javascript
复制
pid_t pid = vfork();

当我们运行vfork()时,地址空间在父进程和子进程之间共享,相同的变量在父进程和子进程中都会被修改!,但是在子进程中它被顺序地设置为0,在子进程退出或执行程序之后,变量将被第二次设置,但在父进程中设置子进程的pid。

NB手册说:

vfork()与fork(2)的不同之处在于,调用线程被挂起,直到子线程终止为止(通常,通过调用_exit(2),或者在传递致命信号之后调用异常),或者调用execve(2)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62080384

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档