一、fork函数
pid_t fork(void); 返回值:子进程中返回0,父进程中返回子进程ID,出错返回-1。
一个现有进程可以调用fork创建一个新进程。
子进程是父进程的副本。例如:子进程获得父进程数据空间、堆和栈的副本(主要是数据结构的副本)。父子进程不共享这些存储空间部分。父子进程共享正文段。 由于fork之后经常归属exec,所以现在很多实现并不执行一个父进程数据段、栈和堆的完全复制。作为替代,使用了写时复制(Copy-On-Write)技术。这些区域由父子进程共享,而且内核将他们的访问权限改变为只读的。如果父子进程中的任一个试图修改这些区域,则内核只为修改区域的那块内存制作一个副本。
演示fork函数:
#include<stdio.h>
#include<unistd.h>
int glob = 6;
char buf[] = "a write to stdout\n";
int main()
{
int var;
pid_t pid;
var = 88;
if(write(STDOUT_FILENO, buf, sizeof(buf)-1) != sizeof(buf)-1)
perror("write error");
printf("before fork\n");
pi