一、fork写时复制测试

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int a = 200;
int main(int argc,char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0)
{
a = 100;
printf("子进程的a=%d\n", a);
}
else
{
printf("父进程的a=%d\n", a);
}
return 0;
}

result:

linux fork详解_C++

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int a = 200;
int main(int argc,char *argv[])
{
pid_t pid;
pid = fork();
if (pid == 0)
{

printf("子进程的a=%p\n", &a);
}
else
{
printf("父进程的a=%p\n", &a);
}
return 0;
}

result:

linux fork详解_操作系统_02

二、 循环创建n个子进程

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int n = 5, i; //默认创建5个子进程

if (argc == 2)
{
n = atoi(argv[1]);
}

for (i = 0; i < n; i++) //出口1,父进程专用出口
if (fork() == 0)
break; //出口2,子进程出口,i不自增

if (n == i)
{
sleep(n);
printf("I am parent, pid = %d\n", getpid());
} else
{
sleep(i);
printf("I'm %dth child, pid = %d\n",
i+1, getpid());
}

return 0;
}

result:

linux fork详解_操作系统_03