这里写目录标题
vfork与fork的区别
区别一:vfork可以直接使用父进程存储空间,不拷贝 ,fork函数会拷贝一份父进程的数据给子进程,彼此互相独立。
区别二:vfork可以保证子进程先运行,当子进程调用exit退出后,父进程才执行。fork函数:子进程和父进程互相争抢系统资源。
exit函数
头文件:stdlib.h
功能:为退出程序的函数
用法:
exit(1); 为异常退出 //只要括号内数字不为0都表示异常退出,里面的参数值会返回给操作系统。
exit(0); 为正常退出
注意:括号内的参数都将返回给操作系统;
return() 是返回到上一级主调函数,不一定会退出程序;
实例
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
int num;
pid=vfork();
if(pid > 0)
{
while(1)
{ num++;
printf("parent process,pid is %d\n",getpid());
sleep(1);
printf("num is %d \n",num);
}
}
else if(pid == 0)
{
while(1)
{ num++;
printf("child process ,pid is %d\n",getpid());
sleep(1);
if(num==3)
{
exit(0); //_Exit(0)或者_exit(0)
}
printf("num is %d \n",num);
}
}
return 0;
}
如上图所示,子进程直接使用父进程的存储空间,所以子进程结束后,num输出为4,要用exit()函数来正常退出进程,才能正常显示num的值。