天马行空网站建设,多用户商城系统哪里有,怎么做百度提交入口网站,多少钱翻译成英文函数原型
pid_t vfork(void);//pid_t是无符号整型
所需头文件
#include sys/types.h
#include unistd.h
功能
vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程#xff0c;但它们创建的子进程是有区别的。
返回值
成功子进程中返回 …函数原型
pid_t vfork(void);//pid_t是无符号整型
所需头文件
#include sys/types.h
#include unistd.h
功能
vfork() 函数和 fork() 函数一样都是在已有的进程中创建一个新的进程但它们创建的子进程是有区别的。
返回值
成功子进程中返回 0父进程中返回子进程 ID失败返回 -1
vfork与fork的区别
关键区别一:
fork执行时无先后顺序父进程与子进程会争夺执行
vfork保证子进程先运行,当子进程调用exit退出后父进程才执行
代码验证
#include stdio.h
#include sys/types.h
#include unistd.hint main()
{int fork_t 0;fork_t fork();if(fork_t 0){while(1) {printf(This is father\n);sleep(1);}}else if(fork_t 0){while(1){printf(This is child\n);sleep(1);}}return 0;
}#include stdio.h
#include sys/types.h
#include unistd.h
#include stdlib.hint main()
{int vfork_t 0;int count 0;vfork_t vfork();if(vfork_t 0){while(1) {printf(This is father\n);sleep(1);}}else if(vfork_t 0){while(1){printf(This is child\n);sleep(1);count;if(count 3){exit(-1);//输出三次子进程之后退出}}}return 0;
}第一部分代码可见fork函数中的父进程和子进程会争夺输出而第二部分的vfork函数会在子进程输出3次退出之后再执行父进程。 关键区别二
fork中子进程会拷贝父进程的所有数据子进程是父进程的地址空间
vfork中子进程共享父进程的地址空间
代码验证
#include stdio.h
#include sys/types.h
#include unistd.hint main()
{int fork_t 0;int a 10;fork_t fork();if(fork_t ! 0){printf(This is father,a %d\n,a);}else{printf(This is child,a %d\n,a);}return 0;
} #include stdio.h
#include sys/types.h
#include unistd.h
#include stdlib.hint main()
{int vfork_t 0;int count 0;vfork_t vfork();if(vfork_t 0){while(1) { printf(count %d\n,count);printf(This is father\n);sleep(1);}}else if(vfork_t 0){while(1){printf(This is child\n);sleep(1);count;if(count 3){exit(0);}}}return 0;
}第一部分代码可知在父进程中定义a调用fork函数时父进程与子进程打印a的值一样说明子进程会拷贝父进程的所有数据(父进程的只打印自己的值不会收子进程影响)第二部分代码可知在子进程结束之后才会执行父进程且子进程中数值发生改变在父进程调用时会发生改变(一开始父进程a0调用后a3)会受到子进程影响