linux之进程

今天分享一个关于自己总结的进程的知识点

1.进程的概念

在谈进程之前先说下操作系统这个名词,操作系统是什么?
简单的说操作系统就是一个为了让计算机更加好用,对计算机上的软硬件进行管理的软件。
现在回归正题,进程是什么?
从用户角度来说,进程就是运行中的程序。
从操作系统角度来说,进程就是操作系统对运行中程序的描述信息,即进程描述符–统称PCB。
描述信息包括:程序计数器,上下文数据,内存指针,记账信息,进程状态,优先级,标识符PID(进程id),文件的I/O状态信息。

查看进程
ps -aux 是以BSD方式显示
a 显示所有用户的进程, u 显示用户,x 显示无控制终端的进程。
输出格式如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER:用户名
PID:进程id
%CPU:CPU占用率
%MEM:内存使用量
VSZ: 如果一个程序完全驻留在内存的话需要占用多少内存空间
RSS:当前实际占用了多少内存
TTY:终端的次要装置号码
STAT:进程当前的状态
START:启动命令的时间点
TIME:进程执行起到现在总的CPU占用时间
COMMAND:启动这个进程的命令

ps -ef 是以System V方式显示,该种方式比BSD方式显示的多
e 显示所有用户的进程,此参数的效果和指定"a"参数相同 f 用ASCII字符显示树状结构,表达程序间的相互关系。
输出格式如下:
UID PID PPID C STIME TTY TIME CMD
UID:用户id
PID: 进程的id
PPID: 父进程的id
C: cpu占比
STIME: 系统启动时间
TTY: 登陆的终端机位置
CMD: 所下达的指令为何

2.进程创建

fork:创建进程
通过复制调用父进程,创建一个新的进程(子进程)
复制:复制的是父进程的pcb,复制父进程的大部分数据,因此代码共享,数据独有。
通过返回值判断是否创建成功,分流父子进程。
对于父进程,返回的是子进程的pid>0
对于子进程,返回的是0
!!父子进程谁先运行,取决于CPU的调度。

3.进程状态

linux下的进程状态:
运行态(R)
可中断睡眠态(S):
不可中断睡眠态(D):
停止态(T)
追踪态(t)
死亡态(X)
僵死态(z)
这里死亡态不常见,不做讨论,重要的是僵死态,会导致僵尸进程的产生。
僵尸进程的产生原因:子进程先于父进程退出,退出原因(返回值)保存在pcb中,操作系统检测到子进程退出后,通知父进程,但是父进程可能此时并没有关注子进程的退出(此时可能在完成其他任务),这时候操作系统不能随意释放子进程资源(因为父进程可能会关心子进程的退出原因),因此子进程就处于推出但是资源没有完全释放的状态(僵死状态)。
危害:资源泄漏,僵尸进程过多会导致新的进程无法创建。
kill -9 进程名:强杀某个进程(除了僵尸进程)
如果一个进程杀不死,他可能就是僵尸进程。
解决僵尸进程的方法:干掉父进程(退出原因的保存已经毫无意义)
这里举一个僵尸进程的例子:
创建了一个zombie.c的文件,然后gcc编译后,运行zombie程序
zombie.c文件内容如下图,子进程先于父进程退出,父进程死循环,这样将会产生僵尸进程
在这里插入图片描述
同时另开一个窗口查看zombie进程
使用ps -aux|grep zombie 命令查看
在这里插入图片描述
发现产生了一个僵尸进程,状态为僵死态(Z),此时如果想杀死这个僵尸进程直接用kill命令是无法实现的,所以我选择删除他的父进程,使用如下命令:
kill -9 14793 杀死父进程,在使用ps命令查看,发现僵尸进程就没了!
在这里插入图片描述
如果要避免僵尸进程的产生,需要父进程一直等到子进程释放,如下所示:
在这里插入图片描述
创建一个子进程,然后睡眠5秒后退出,然后父进程此时一直在等待子进程的返回值,在子进程还没释放时,父进程可以干其他的事,然后子进程退出释放后,父进程利用wait函数得到子进程的返回值,然后就再执行其他的任务,这样以后子进程就不会变为僵尸进程。
阻塞:为了完成功能发起调用,如果当前不具备完成条件,则一直等待,直到完成后返回。
非阻塞:为了完成功能发起调用,如果当前不具备完成条件,则立即报返回。
阻塞与非阻塞:调用功能当前不具备完成条件是否立即返回。

4.进程优先级

优先级:一个层次划分-决定进程cpu资源的优先分配权
为什么要有优先级:让操作系统运行的更加合理
查看进程优先级:ps -l
I/O密集型程序:大量时间都在执行I/O操作
cpu密集型程序:大量时间在进行运算操作
PRI表示优先级,值越大优先级越低(默认为80)
nice值范围:-20~19
设置方法:renice -n ni_val -p pid nice -n ni_val ./main
竞争性:进程之间具有竞争性,竞争资源
独立性:进程之间应该具备独立性,保证进程稳定运行
并发:进程在cpu上切换调度运行
并行:cpu资源足够,进程就可以同时运行
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值