• fork()函数、进程表示符、进程位置


    linux、centos6.5

    fork()函数:作用于创建子进程、返回值有两个,一个是向父进程返回它的pid,一个是返回0;

    eg1:

      1 #include<stdio.h>
      2 #include<sys/types.h>
      3 int main()
      4 {
      5         fork();
      6         printf("aaaaaaaaa
    ");
      7         return 0;
      8 }

    eg2:

      1 #include<stdio.h>
      2 #include<sys/types.h>
      3 #include<unistd.h>
      4 int g_val = 0;
      5 int main()
      6 {
      7         pid_t id = fork();
      8         if(id < 0)
      9         {
     10                 perror("fork error");
     11         }
     12         else if(id == 0)
     13         {//child
     14                 g_val=100;
     15                 printf("I am child:pid:%d,ppid:%d,g_val:%d,&g_val:%p
    ",
     16                 getpid(),getppid(),g_val,&g_val);
     17         }
     18         else
     19         {//Father
     20                 sleep(3);
     21                 printf("I am father:pid:%d,ppid:%d,g_val:%d,&g_val:%p
    ",
     22                 getpid(),getppid(),g_val,&g_val);
     23         }
     24         sleep(1);
     25         return 0;
     26}

    进程标识符主要看PID,PPID下图是部分进程表示符 

    可以看到上面child和father各自的g_val值不一样,地址一样(虚拟地址)

    值不一样是因为在fork()下,有两个分流,父子进程资源代码共享,但是数据是独自一份所以child的g_val=100;并不会影响father看到的g_val

     

    不同的PCB他们及时他们的虚拟地址一样,因为不同的页表对应的物理地址可能不同,这也是进程独立性的表现 

    安心下来做技术,笑是最大的福气
  • 相关阅读:
    MyEclipse 工具优化和初始化设置
    ubuntu添加软件源
    C/C++数组名与指针区别深入探索
    为什么不常见include .c文件
    [置顶] Linux学习笔记(完整版)
    linux .deb文件安装
    我们就是查拉图斯特拉所说最后的人?!
    关于Mina
    讨厌SVN
    关于对Mina的一些看法
  • 原文地址:https://www.cnblogs.com/JN-PDD/p/6896114.html
Copyright © 2020-2023  润新知