进程的概念

2019-07-14 12:40发布

一、基本概念    ·课本概念:程序的一个执行实例,正在执行的程序等。    ·内核观点:担当分配系统资源(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 2 #include 3 #include 4 5 int main() 6 { 7 printf("pid %d ",getpid()); 8 printf("ppid %d ",getppid()); 9 return 0; 10 }
六、通过系统调用创建进程(fork初识)    ·运行man fork认识fork
    ·fork有两个返回值
    ·父子进程共享代码,数据各自开辟空间,私有一份(采用写时拷贝) 1 #include 2 #include 3 #include 4 5 int main() 6 { 7 int ret = fork(); 8 printf("hello proc : %d!,ret : %d ",getpid(),ret); 9 sleep(2); 10 return 0; 11 }     ·fork之后通常要用if分流 1 #include 2 #include 3 #include 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 : %d ",getpid(),ret); 14 } 15 else{//parent 16 printf("I am parent : %d!,ret : %d ",getpid(),ret); 17 } 18 sleep(2); 19 return 0; 20 }