Linux fork

fork

 

一个运行的进程通过调用fork函数就会产生子进程,原来的进程称为父进程,现在这个进程称为子进

 

子进程在创建的时候会拷贝原来父进程的代码段,数据段。操作系统通过pid进行区

 

这里需要注

 

父进程在fork后继续执

而子进程由于拷贝了父进程的PCB模块,程序指针已经不是指向main的开始位置,而是从fork后面开始执行

由于数据段也会拷贝,所以两者的数据段中的初始值都是一样的,也就是读共享了,但是其实两者在不同的地址空间中,所以后续的写入互不相干

在程序中通过fork的返回值来判断当前执行的是哪个进程,如果返回值为0表示是子进程,要获取子进程的进程ID可以采用getpid获取,返回值大于0就是父进程,返回值就是相应子进程的ID号码

实例代码

 

#include<stdio.

#include<unistd.h

#include<sys/types.h

 

int main()

   printf("begin test fork\n")

 

   int *data1 = new int(1

   pid_t pid = fork()

   printf("after fork          ")

 

   int *data2 = new int(2

   if (-1 == pid

   

        perror("fork all")

   

   else if (0 == pid

   

 

        printf("child process: %d, data1 is %x  data2 is %x\n", getpid(), data1, data2

//        while(1)

   

   els

   

        printf("parent process %d   fork return is %d data1 is %x data2 is %x\n", getpid(), pid, data1, data2)

//        while(1)

   

 

  return 

 

 

运行结果为

 

 

 

从上面的运行结果来看,子进程运行的位置是在fork之后的,而且两者的数据段的地址是一样

 

vfo

 

 

rk的。:}0;};;{e};);{)};{));;;);; {>>h>:。。。行。意:分。程。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值