赞
踩
进程简单来说就是运行的程序,由PCD(process control block)和程序代码和数据组成,本篇文章重点讲解进程的概念和Linux操作系统的进程细节。
进程的信息被放在一个叫做进程控制块的数据结构(PCB)中,在Linux操作系统下的PCB是task_struct
在windows操作系统中可以在任务管理器中查看
在Linux中也能查看进程
在根目录下有一个proc文件里面可以查看当前系统实时进程信息
如果想要查看具体的进程信息,可以用ps ajx查看进程信息,同时结合grep指令筛选出我们想要的那个进程
比如:
先创建一个简单的程序
当这个程序运行起来的时候就进程
用ps和grep查看mytest进程的信息
第二条是grep的进程信息,如果想把第二条屏蔽掉,可以一个grep -v选项
当我们在学C语言的文件操作的时候,总是会听到当前路径这词,其实这个当前路径指的就是进行的路径
pid就相当于一个进程的标识,类似于我们的身份证,可以用getpid()接口调用(这个是系统接口,在windows下不一定能调用)
ppid就是parent pid是父进程的pid可以通过getppid()获得
可以发现pid在变但是ppid是不变的,29520是bash进程,一般程序的父进程都是bash
Linux中也能像windows操作系统一样可以强行终止进程
fork():创建子进程
有两个返回值,一是给父进程返回子进程的pid,而是给子进程返回0
子进程继承父进程的代码
比如:
由于fork之后又两个进程执行这段代码,所以会输出两个hello world
通过pid和ppid可以发现第二个进程是第一个进程的子进程
运行态: 进程只要在运行队列中就叫做运行态,代表进程已经做好准备,随时可以调度
终止态:改进程还在,只不过永远不运行,随时等待被释放
阻塞态:cpu运行速度很快,当进程在申请其他资源的时候(网卡、显卡等),需要把cpu资源让出来,其他资源申请完成后进入就绪状态,等待获取cpu
挂起态:如果内存不足的时候,OS会将短期内不会被调度的进程代码和资源换到磁盘上,然后释放空间,只留一个PCB,腾出更多空间,因此内存不足的时候,往往伴随着磁盘被高频访问
Linux进程状态:
R(运行态):
当我们执行这个程序的时候,会一直打印hello world,但该进程的状态并不是R
这是因为打印到显示器上,而外设的调度比cpu慢很多,所以cpu大部分时间都在等显示器准备就绪
当我们把printf和sleep删掉后,进程状态就是R了
S、D(阻塞态):
S和D的区别是D是深度睡眠,当进程在长时间调度磁盘的时候,经常长时间处于休眠状态,为了防止被OS误杀掉,所以有了D状态,在D状态下的进程不能被OS杀掉
Z、X:
Z是僵尸状态,X是死亡状态
当Linux进程退出的时候,一般不会立马进入X状态回收资源,而是进入Z状态
Z状态是为了维护退出信息,让父进程或OS读取
如果父进程还在运行,而子进程退出了,那么子进程就会进入僵尸态
如果父进程在子进程之前被干掉,那子进程的父进程会变为OS,子进程退出的时候需要将退出信息交给OS,这种进程称为孤儿进程
T、t(暂停)
当我们在调试时、下载暂停等场合中,进程都会进入暂停状态
优先权高的进程有优先执行的权利,可以改善系统性能
Linux种进程的优先级由进程的PRI属性决定,值越小优先级越高
修改进程的优先级是通过对进程NI的属性进行修改
进入top后按“r”–>输入进程PID–>输入nice值 就能修改进程优先级
进程的优先级PRI(new)=PRI(old)+nice
每次设置nice时,PRI都从60开始
nice的取值范围是-20-19,一共40级
并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行
并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发
操作系统会给每一个进程赋予一个时间片的概念,多个进程会通过交叉的方式,让多个进程代码在一段时间内都得到推进
在进程切换的过程种,需要把cpu中的进程数据存放回PCB,这样在下一个周期执行到这个进程是可以接着上一次的执行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。