What the different between fork() and vfork()
- 在子程序呼叫exec 或 exit前, 子程序都會被保證優先執行
- vfork(): 父程序與子程序共用位址空間(參考Ex_1)
Ex_1:
pid_t pid;
int test = 0;
printf("before vfork");
pid = vfork();
if(pid<0)
printf("error in vfork");
else if(pid == 0) //child
{
test++;
_exit(0); //如果在這裡改用exit(0), 下面的parent就不會印出test等於多少.
//是因為exit會去清除並關閉所有的I/O stream
//等parent呼叫到printf,只會回傳-1
}
//parent
printf("test: %d", test);
exit(0);
output:
before vfork
test: 1