进程控制

一、进程切换(上下文切换)

暂停当前运行的进程,从运行状态变成其它状态
调度另一个进程,从就绪状态变成执行状态

进程切换的要求
进程切换前,保存进程上下文信息
进程切换后,恢复进程上下文信息
快速切换

上下文信息包括:寄存器、CPU状态、内存地址空间

二、进程创建和加载

创建进程的系统调用:fork
加载进程的系统调用:exec

1.fork()

把一个进程复制成两个进程(将整个地址空间进行复制),子进程获得一个新PID

1)fork()创建一个继承的子进程
复制父进程的所有变量和内存
复制父进程的CPU寄存器(有部分没有复制以区别父子进程)

2)fork()的返回值

int pid = fork()

子进程的fork()返回0
父进程的fork()返回子进程的PID
fork()返回值可以方便后续使用,子进程可使用getpid()获取PID
这里写图片描述

2.exec()

用新进程重写当前进程,PID没有改变
允许加载一个完全不同的程序,并从main开始执行

exec(可执行程序,参数数量,参数1,参数2...)

这里写图片描述

三、进程等待

wait()用于父进程等待子进程的结束
exit()用于进程结束时完成进程资源回收

子进程结束时通过exit()向父进程返回一个值
父进程通过wait()接受返回值

1.wait()的功能

1)有子进程存活时,父进程进入阻塞状态,等待子进程的返回结果
2)有僵尸子进程等待时(子进程已调用exit(),等待父进程调用wait()),立即获得其中一个返回值
3)无子进程存活时,wait()直接返回

2.exit()的功能

1)将eixt()的参数作为进程的结果返回
2)关闭所有打开的文件等占用资源
3)释放内存
4)释放大部分进程相关的内核数据结构
5)检查父进程是否存活

  1. 如果存活,保留返回值直到父进程需要,并进入僵尸状态
  2. 如果没有存活,则释放所有数据结构,进程结束

四、其它进程控制系统调用

优先级控制:nice()执行进程初始优先级,unix中优先级会随执行时间而衰减
进程调试支持:ptrace()允许一个进程控制另一个进程执行(设置断点,查看寄存器等)
定时:sleep()可以让进程在定时器的等待队列中等待

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值