linux fork详解

一、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:
在这里插入图片描述

相关拓展

  1. string写时复制技术实现
  2. linux写时复制技术初探
posted @ 2018-12-20 15:36  乐天的java  阅读(165)  评论(0)    收藏  举报