来自GNU手册:
函数具有与fork(2)相同的效果,但如果由vfork()创建的进程修改pid_t类型的变量以外的任何数据,则行为是未定义的,该变量用于存储vfork()的返回值,
什么意思?这是否意味着vfork()的返回值不能分配给非pid_t类型的变量?
发布于 2020-11-05 11:41:45
这方面的手册很混乱。实际上,两个进程(子进程和父进程)共享相同的地址空间,甚至堆栈!
vfork()返回两次:
fork()/vfork()的返回代码通常存储在一个变量中(类型为pid_t,以遵循系统调用的概要):
pid_t pid = vfork();当我们运行vfork()时,地址空间在父进程和子进程之间共享,相同的变量在父进程和子进程中都会被修改!,但是在子进程中它被顺序地设置为0,在子进程退出或执行程序之后,变量将被第二次设置,但在父进程中设置子进程的pid。
NB:手册说:
vfork()与fork(2)的不同之处在于,调用线程被挂起,直到子线程终止为止(通常,通过调用_exit(2),或者在传递致命信号之后调用异常),或者调用execve(2)。
https://stackoverflow.com/questions/62080384
复制相似问题