vfork建立程序
阿新 • • 發佈:2020-12-13
技術標籤:linux
vfork函式也可以建立程序,返回值與fork的返回值一樣,與fork有什麼區別呢?
-
區別一:vfork函式直接使用父程序的儲存空間,不拷貝。(fork:子程序拷貝父程序的資料段,程式碼段;vfork:子程序與父程序共享資料段)
-
區別二:vfork函式:保證子程序先執行,當子程序呼叫exit退出後,父程序才執行。fork函式:父子程序的執行順序不確定,是由程序排程決定的
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
pid = vfork();
int cnt = 0;
if(pid > 0){
while(1){
printf("this is father print, pid=%d\n",getpid());
sleep(3);
printf("cnt=%d\n",cnt);
exit (0);
}
}
else if(pid == 0){
while(1){
printf("this is child print, child pid=%d\n",getpid());
sleep(3);
cnt++;
if(cnt == 3){
exit (0);
}
}
}
return 0;
}
執行結果: