在vfork下,对于return和exit的理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在vfork下,对于return和exit的理解相关的知识,希望对你有一定的参考价值。
fork是创建一个子进程,并把父进程的内存数据拷贝一份给子进程。
而vfork中内存数据所共享的,vfork保证子进程先运行,当子进程调用exit()或exec()后,父进程才会执行。
#include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <stdlib.h> int main() { pid_t id=vfork(); if(id==0) { printf("child\n"); sleep(1); return 1; } else { printf("father\n"); } return 0; }
而把return 1;换成exit(1)
则能正常运行
如果在vfork子进程中return,这就意为main()函数return了,会把main函数所占用的栈清理掉,而父子进程共享,那么父进程在调用main函数时会调用子进程已清理的栈,出现错误。
return 会释放局部变量,并弹栈,回到上级函数执行。exit直接退掉。
所以,子进程调用exit没有修改函数栈,所以,父进程得以顺利执行。
以上是关于在vfork下,对于return和exit的理解的主要内容,如果未能解决你的问题,请参考以下文章