必威体育Betway必威体育官网
当前位置:首页 > IT技术

进程的创建和进程的状态

时间:2019-10-03 21:43:20来源:IT技术作者:seo实验室小编阅读:75次「手机版」
 

进程

进程

**浅层认识:**程序硬盘上要开始执行起来,先要加载到内存上,然后描述起来(创建PCB),然后在运行,运行起来的程序叫进程。

**从操作系统的角度来看进程: **

操作系统就是管理者,进程就是被管理者,要管理进程需要:

1.操作系统不直接管理进程,先将进程描述起来
2.描述进程的载体是一种结构体,一个进程具有一个结构体,这个结构体叫做进程的PCB(进程控制块)
3.然后把所有的结构体组织起来,组织起来的方式就是用指针将结构体连成一个链表 (或者用其他高级数据结构组织起来)


PCB–描述进程

PCB是包含进程的信息(描述进程的信息,有优先级,状态等)的一种结构体,

linux下描述进程的PCB叫 task_struct

##task_structl里面的内容

标识符:pid,描述本进程的唯一标识符,用来普别其他进程
状态:任务状态,退出代码,退出信息等
优先级:cpu资源分配的先后顺序
程序计数器:程序中即将被执行的吓一条指令的地址。
内存指针:程序代码和进程相关数据的指针等,可以指向虚拟地址空间,通过页表映射到物理内地址,最终在内存中找到这个进程所要运行的代码和数据。
上下文数据:进程执行时处理器中的寄存器的数据(进程正在执行时寄存器中的数据)(时间片:进程在cpu上运行的时间,分时机制:aa)
i/o状态信息:进程打开的文件信息
记账信息:可能包含处理器的时间总和(运行时间)等

##查看进程

每个进程都有自己的PID

查看进程指令有: ls /proc/ , ps aux 等

系统调用获取进程标识符(id):

getpid()             //获取进程pid
getppid()            //获取父进程pid

创建进程

创建进程有两个函数:fork 和 vfork

pid _t fork(void )

有两个返回值:对于子进程来说,返回0;对于父进程来说,返回子进程的id,创建失败返回-1。

创建子进程:以父进程为模板,父子进程代码段相同,但数据不同,fork的返回值起到分流的作用,用户通过fork的返回值来判断哪个是子进程,哪个是父进程。

fork之后,父子进程谁先运行,由调度器决定,父子进程分别独立自己的,执行自己的任务

fork之后内核的做法:

  1. 分配新的内存块和内核数据给子进程
  2. 将父进程的部分数据内容拷贝到子进程中
  3. 添加子进程到系统的进程的列表中
  4. fork返回,开始调度

    代码如下:

    这里写图片描述

    打印结果:

    这里写图片描述

变量地址相同,内容不同;通常,父子进程代码共享,父子不在写入时,数据也是共享的,当任意一方要写入时,就以写实拷贝的方式来处理

vfork

pid_t vfork(void)

也是用来创建子进程的但是vfork创建的子进程和父进程共享虚拟地址,但fork创建的子进程具有独立的虚拟空间;

vfork保证子进程先运行,在它调用exit后,父进程才可能被调度运行

代码:这里写图片描述

运行结果:

这里写图片描述

地址相同,变量内容相同,因为虚拟地址相同

创建进程图:

这里写图片描述

这里写图片描述

fork和vfork的区别

1.fork:子进程拷贝父进程的数据段,代码段。

2.vfork:子进程和父进程共享代码段。

3.fork(),创建的父子进程的执行次序不确定,vfork()保证子进程先运行,在子进程调用exit()之后父进程才被调用。

进程状态

统一描述:就绪,态运行态,阻塞态

linux下进程的状态:

运行状态  (R)       //要么在运行这种,要么在运行的队列中
睡眠状态(S)         //浅睡眠,可以被唤醒
磁盘休眠状态(D)       //深度睡眠,不可以被唤醒,不能被中断(不可终端睡眠状态)
停止状态(T)       //可以发送信号给进程让其暂停,也可以发送信号让它继续运行 
跟踪状态(t)      //跟踪进程的状态
死亡状态(X)
僵尸状态(Z)

僵尸进程

概念:进程退出,父进程没有读取到子进程的返回代码时 就会产生僵尸进程。

僵尸进程产生原因以及危害:

1.子进程先于父进程退出(父进程没有关心子进程的退出状态)

2.进程退出为了保存自己退出的原因,因此退出后资源不会被完全释放,等待父进程来获取退出状态(这就是为什么要进程等待),然后释放子进程所有资源,所以假如父进程没有关心子进程的退出,那么这个时候退出子进程将成为一个僵尸进程,占着资源不释放,成为僵尸进程,造成资源泄漏(资源没有完全释放),正常进程可能无法创建。

孤儿进程

父进程先于子进程退出,这个孤儿进程将被孤儿院init进程所领养,子进程退出后由init回收释放

进程的优先级

cpu分配资源的先后顺序,调整优先级的命令 nice,renice,其实是调整NI的值,nice的值影响进程的而优先级

交互式进程:优先级应该高一点

批处理进程:优先级可以低一点

程序与进程

程序是硬盘上的一个文件。

进程是放在内存里,还要被操作系统管理。

管理:

管理和被管理者不直接沟通

被管理的对象需要描述起来(利用数据)

为了高效,描述对象也要被组织起来

相关阅读

http状态码301和302详解及区别

见:https://blog.csdn.net/grandPang/article/details/47448395一直对http状态码301和302的理解比较模糊,在遇到实际的问题和翻阅各

Stateflow学习笔记之状态图的内部转移(inner transiti

  处理内部转移的事件 考虑下图所示的状态图。 状态A有一个内部转移。转移动作为A_two。 状态B有一个指向自身的外部转移(自循

进程间的五种通信方式

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息.IPC的方式通常有管道(包括无名管道和命名管道)、消息

英孚教育助力企业国际化进程 英语培训计划制定五项注

(2019年7月22日,上海)企业战略转型,尤其是海外扩张之际,第一个要匹配的就是人才战略计划,企业整体英语能力的培养往往会被一举提升到战

linux进程管理命令

1、inux进程信息 1.1. ps 命令:报告程序状况 ps -A  显示所有程序 ps -ef 显示所有程序,并以ascii字符显示树状结构,表达程序间的

分享到:

栏目导航

推荐阅读

热门阅读