进程的概念 - Go语言中文社区

进程的概念


一、基本概念

    ·课本概念:程序的一个执行实例,正在执行的程序等。

    ·内核观点:担当分配系统资源(CPU时间、内存)的实体。

二、描述进程

    ·进程信息被放在一个叫进程控制块的数据结构中,可以理解为进程属性的集合。

    ·课本上称为PCB,Linux操作系统下的PCB是:task_struct。

1、task_struct-PCB的一种

    ·在Linux中描述进程的结构体叫task_struct。

    ·task_struct是Linux内核的一种数据结构,它会被装在到RAM(内存)里并包含着进程的信息。

2、task_struct分类

    ·标识符:描述本进程的唯一标识符,用于区别其他进程

    ·状态:任务状态、退出代码、退出信号等

    ·优先级:相对于其它进程的优先级

    ·程序计数器:程序中即将被执行的下一条指令的地址

    ·内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针

    ·上下文数据:进程执行时处理器的寄存器中的数据

    ·I/O状态信息:包括显示I/O请求,分配给进程的I/O设备和被进程使用的文件列表

    ·记账信息:可能包括处理器时间总和、使用的时钟数总和、时间限制、记账号等

三、组织进程

   可以在内核源代码里找到组织进程。所有运行在系统里的进程都以task_struct链表的形式存在在内核里

四、查看进程

进程的信息可以通过/proc系统文件来查看

例:获取PID为1的进程的信息


五、通过系统调用获取进程标识符

    ·进程id(PID)

    ·父进程id(PPID)

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 
  5 int main()
  6 {
  7     printf("pid %dn",getpid());
  8     printf("ppid %dn",getppid());
  9     return 0;
 10 }

六、通过系统调用创建进程(fork初识)

    ·运行man fork认识fork

    ·fork有两个返回值


    ·父子进程共享代码,数据各自开辟空间,私有一份(采用写时拷贝)

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 
  5 int main()
  6 {
  7     int ret = fork();
  8     printf("hello proc : %d!,ret : %dn",getpid(),ret);
  9     sleep(2);
 10     return 0;
 11 }

    ·fork之后通常要用if分流

  1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 
  5 int main()
  6 {
  7     int ret = fork();
  8     if(ret < 0){
  9         perror("fork");
 10         return 1;
 11     }
 12     else if(ret == 0){//child
 13         printf("I am child: %d!,ret : %dn",getpid(),ret);
 14     }
 15     else{//parent
 16         printf("I am parent : %d!,ret : %dn",getpid(),ret);
 17     }
 18     sleep(2);
 19     return 0;
 20 }

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zhuboke3344/article/details/79593679
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-10-27 20:36:09
  • 阅读 ( 1310 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢