一、函数原型
1、fork
#include <sys/types.h>
#include <unistd.h>//头文件
pid_t fork(void);//函数原型
返回值:
返回父进程的pid;
子进程:返回0;
错误:返回-1;
2、vfork
#include <sys/types.h>
#include <unistd.h>//头文件
pid_t vfork(void);函数原型
返回值:
成功:子进程中返回 0,父进程中返回子进程 ID。
失败:返回 -1。
二、函数功能
1.fork
create a child process--创建一个子进程
fork通过复制调用进程来创建一个新进程。新进程称为子进程,调用进程称为父进程
在使用fork时,两个内存空间具有相同的内容。子进程和父进程并行执行。
(注意:子进程和父进程的执行顺序是不确定的)当父进程死亡后,子进程称为孤儿进程,会被init进程收养。
#include<stdio.h>
#include<sys/types.h>
#include<unistd.h>
#include<sys/wait.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
pid_t pid = fork();
if(pid < 0)
{
perror("pid_t");
return -1;
}
if(pid == 0)
{
printf("parent pid = %d,child pid = %d\n",getppid(),getpid());
exit(0);//使子进程正常结束
}
else
{
int status;
//sleep(1);//sleep可以使当前主进程睡眠,执行子进程
wait(&status);//阻塞函数,等待子进程结束
printf("status = %d\n",WEXITSTATUS(status));
printf("parent pid = %d,my parent pid =%d\n",getppid(),getpid());
}
return 0;
}
2.vfork
-----create a child process and block parent ------创建子进程并阻止父进程
vfork与fork具有相同的效果,不同的是,vfork保证子进程先运行,子进程结束了或在使用了exec/exit后,父进程才能运行。
注意:与父进程共享地址空间