在父进程中通过系统库函数fork() ,创建出其子进程 ,子进程就是副本 ,其虚拟地址空间的内容跟父进程一模一样 ,即其运行的代码都是一样的。其区别是进程的PID 。fork()函数调用成功后 ,在父进程内返回子进程的PID ,在子进程内返回0 ,调用失败则返回负数,通常是 -1。
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <error.h>
int main()
{
pid_t pid; //pid_t为系统数据类型
pid = fork(); //创建子进程
if(pid < 0) //创建进程失败
{
perror("fork");
exit(1);
}
else if(pid == 0) //子进程才能运行
{
printf("this is child process:%d\n",getpid());
}
else if(pid > 0) //父进程才能运行
{
printf("this is father process:%d\n",getpid());
}
return 0;
}
运行结果:(通过getpid()函数获取父子进程的PID号)
每个进程,系统都会为其分配一个大小为4G的虚拟地址空间 。父进程与子进程的关系: