1.创建子进程(系统调用函数):pid_t fork(void)
注:引用#include<unistd.h>头文件
若创建失败返回-1,成功则fork函数调用一次返回两次,即在原来进程(父进程)中返回新进程(子进程)的pid,且子进程pid绝对不为0,在新进程中返回0。
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<assert.h>
int main()
{
pid_t n=fork();
assert(n!=NULL);
if(n==0)
{
printf("hello\n");
}
else()
{
printf("world");
}
}
输出结果为: 调用一次返回两次
world
hello
2.fork之后,写时拷贝技术
fork之后,子进程会拷贝父进程的PCB结构,然后对PCB里面的数据进行修改。父进程的表页直接拷给子进程。子进程获得父进程数据空间、堆和栈的副本,父子进程共享所有的数据空间(.text),并不共享这些存储空间部分(.data)。
fork之后,父子进程相互独立,单独执行