#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
/*
vfork和fork的區別:
1.vfork創建的子進程和父進程共享線性地址空間;fork創建的子進程具有獨立的線性地址空間
2.vfork先執行子進程;fork子進程和父進程的執行順序是隨機的
3.vfork創建的子進程中只有在調用exit()或者execve()函數之後,父進程纔可能被成功調用
*/
int main(void)
{
pid_t fpid;
int count = 0;
fpid = vfork();
if (fpid == -1) {
perror("MSG");
}
else if (fpid > 0) {
printf("parrent: %d\n", getpid());
count++;
printf("count: %d\n", count)
}
else if (fpid == 0) {
printf("child: %d\n", getpid());
count++;
printf("count: %d\n", count);
exit(0);
}
return 0;
}
/*
1.執行結果:
child: 13729
count: 1
parrent: 13728
count: 2
2.如果子進程沒有調用exit(), 執行結果爲:
child: 13729
count: 1
parrent: 13728
count: 1
重複上面的打印結果
*/
vfork函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.