fork与vfork区别及用exit于return返回时的区别

fork()与vfork()区别:

1.fork()父子进程的执行次序不确定,它们的调度顺序由调度器说了算。而vfork()保证子程序先运行,在调用exit或者exec前父子进程数据共享,在子进程调用exit或exec退出后父进程才能被调度运行。

2.fork()子进程会拷贝父进程的数据段,而vfork()父子进程共享数据段。

return与exit返回时的区别:

首先结束子进程的调用需要用exit(),因没有修改函数栈,若在vfork中return,那就意味在main函数中return,这是因为父子进程共享函数栈。由于main函数也是被启动例程调用的,因此main函数return后就返回到启动例程中,而main函数return后还会调一些exit()相似函数。

因return会释放局部变量,并弹栈,回到上级函数执行,而exit(它不是系统调用,时glibc对系统调用_exit()的封装)直接退掉。