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()的封装)直接退掉。
时间: 2024-10-11 21:22:41