Linux学习笔记 三

进程

程序就是二进制文件,文件保存在磁盘中,想要运行程序,就要把磁盘中的文件转到内存中,因为不可能只有一个程序,所以要批量化管理,就产生了一个个数据结构,内核产生的数据结构(pcb)+内存中的代码和数据就是进程。至于起这个名字,我猜是这个程序正在进行。

在我们平时输入指令时,也是一个进程,所有进程的父进程都是bash(命令行解释器,也是进程),每个进程有对应的pid,查看其父进程就是ppid。

bash也有父进程,暂且不谈,因为它涉及到系统。

fork

除了双击或者./创建进程外,代码也可以创建。

这里可以尝试下有意思的东西,同一个函数,地址不变,返回值有两个。

 

 1.fork之后,执行流会变成两个。

2.之后,谁先运行由调度器决定。

3.之后,代码共享,通常用if和elseif执行流分流。

fork原理

1.把内核创建的数据结构大部分拷贝,和原本共用一个代码和数据。

2.运行时每个都具有其的独立性

3.代码具有只读性。数据:当有一个执行流尝试更改数据时,OS会自动触发写时拷贝。

4.两个返回值:就是俩,父进程一个,子进程一个,也确实存到了一个变量里,虽然地址相同,但不代表一个地址只能找到一个数据。

进程状态

进程在被cpu调动时会处于一种状态;

进程状态后可能会带有+,代表在前台,不带则在后台,无法用CTRL C等直接操作,只能用后台相关指令。

阻塞:进程因为等待某种条件就绪,而不推进的状态(其实就是在排队)。(cpu会对所有资源进行管理(管理方式:先描述,在组织),当资源不够或是其他情况,进程在等待某种资源就绪的过程 就是阻塞)。

挂起:不被调用的进程 闲置进程在内存紧张时被调到磁盘的状态。

r状态:运行状态,但不一定代表正在运行,也可能正在排队等待运行(多个进程进行时,以极快速度来回调度进程,所以r状态很难捕捉,就像灯泡一直闪一样(除非无任务循环或其他))。

s状态:休眠状态,可以被中断,和阻塞没什么区别;

d状态:休眠状态,不可被中断;当内存紧张时,操作系统会自主杀死一些休眠进程,当某一部分进程需要磁盘帮助进行拷贝时,会进入这个状态,如果被杀死,就会导致数据丢失,所以有这个状态。

T状态:暂停状态,顾名思义。

t状态:追踪状态,就是程序打了断点,运行到断点的时候就是追踪状态。

x状态:退出状态,程序退出时的状态,很难捕捉。

z状态:僵尸状态,子进程退出后的状态,便于查询最后结果,必须被回收否则资源泄露。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值