linux fork详解
原创
©著作权归作者所有:来自51CTO博客作者wx58c6a41d9524d的原创作品,请联系作者获取转载授权,否则将追究法律责任
一、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:
#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:
二、 循环创建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: