返回 vfork() 的类型



来自GNU手册:

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

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

手册对此非常混乱。实际上,两个进程(子进程和父进程(共享相同的地址空间,甚至是堆栈!

vfork()返回两次:

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

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

pid_t pid = vfork();

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

注意:手册说:

vfork(( 与 fork(2( 的不同之处在于调用线程被挂起 直到孩子终止(通常,通过呼叫 _exit(2( 或 异常,在发出致命信号后(,或者它会呼叫 执行(2(.

相关内容

  • 没有找到相关文章