fork()函数:
1.
fork()在进程1中创建进程2。在创建时是将进程1的所有资源拷贝到了进程2。
2.
子进程独立于父进程,有各自独立的地址空间。进程执行先后顺序不确定。
代码举例:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
pid_t pid = fork();
if(pid == -1)//进程创建出错
{
perror("fork");
return -1;
}
else if(pid == 0)//pid<0为子进程
{
printf("this is child!\n");
}
else//pid>0为父进程
{
printf("this is parent!\n");
}
return 0;
}
结果:
vfork()函数:
1.
vfork()在进程1中创建进程2,在创建时,进程2是共享进程1所分配的资源。
2.
vfork()创建的子进程共享父进程的地址空间,子进程运行在父进程的地址空间上,子进程对改地址空间中数据的修改,父进程可见。
3.
vfork()保证子进程优先运行。
4.
在用vfork()创建进程时,以return 0;结束会释放局部变量,以exit(0);结束则不会释放。所以,当以return 0;结束时,父进程在次引用局部变量,将会是随机值。
代码举例:
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
pid_t pid = vfork();
if(pid == -1)//进程创建出错
{
perror("vfork");
return -1;
}
else if(pid == 0)//pid<0为子进程
{
printf("this is child!\n");
}
else//pid>0为父进程
{
printf("this is parent!\n");
}
exit(0);
}
结果: