进程控制

3 篇文章 0 订阅

进程控制

多进程是程序进行的基本功能,所需要进行基础控制的操作。用来减少因为单核性能不足的原因造成的系统卡死。

子程序与父程序区别

完全继承父进程相关的内存块和数据块,拷贝到子进程。

完全继承父进程相关的内存块和数据块,拷贝到子进程。
(如果有不同的地方就不与父进程使用相同一个内存的,f子进程与父进程共同拥有同一块地方)

分配新的内存块和内核数据结构给子进程
将父进程部分数据结构内容拷贝至子进程
添加子进程到系统进程列表当中
fork返回,开始调度器调度

当其中的一方的试图进行写入,就需要进行拷贝构造一本的副本。

进程创建

image-20230227155748382

错误返回-1,父亲进程返回子进程id,子进程返回0;(可以利用这个进行子进程的使用,if进行判断是非处于子进程还是父进程进行程序的执行)

使用fork进行子进程进行创建

pia_t if = fork();
if(0 == id){
 //代码(子进程)
}

创建失败的原因:进程过多,导致进程错误。

进程终止

直接使用exit或者_eixt进行进程退出。

exit刷新缓冲区然后退出线程,就是将所有的在缓冲区的东西全部清除,然后缓冲区没有任何的东西。

exit(n)的退出相当与turn n;的基本操作相同。而且exit还会返回退出码。(这个对于进程等待后面获取进程退出码有非常多的作用)。

image-20230228162100443


僵尸进程:而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

孤儿进程: 一个父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。孤儿进程将被 init 进程(进程号为1)所收养,并由 init 进程(OS系统)对它们完成状态收集工作。

  • 僵尸进程: 一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中,这种进程称之为僵死进程。

进程等待

子进程被退出之后还要相关的数据需要清除,如果相关的数据 (包括进程号 the process ID,退出状态,运行时间)长时间没有被清除,可能造成内存等相关的问题,上面(前面一段的相关内容)讲述的相关的问题。需要使用相关的东西解决这个问题。

int *status为输出型参数,获取进程退出码的参数。进行exit(n)或者_exit(n)其中的n。如果不需要返回的退出码, 直接书写为nullptr。

返回值pid_t 为进程的id,退出失败为-1(类似的函数都是返回-1)

IMG_9D17D4B3EDCA-1

int option决定等待的方式,pid_t决定不同的进程

optin一共有4个相应的选项,但是常用的只有其中的两个。一个是0基本上与wait的参数使用的东西相同(非阻塞示等待)如果option被填写为WNOHANG,就为阻塞示等待。

填写成为0为非阻塞示等待,基本使用方法与wait相同。

填写为WNOHANG阻塞示等待,其如果进程pid_t pid为具体的某一个进程id,需要等待子进程结束之后才返回进程id。如果是pid_t设置-1, 只要有子进程退出,就返回子进程的id。 没有子进程退出,就返回0。


前面获取的status的参数使用了位图的形式储存相关的东西,不同的退出方式有不同的退出码。

image-20230301115752648

因为处理过程之中会发生一些位图的相关操作,不好进行,所以使用函数进行处理这一个数据

image-20230301120422862

进程替换

通过进程替换可跑其他语言的程序在子进程之中,因此引进来相应的函数进行相关的操作。这个过程之中

image-20230301140334026

这里采用之间替换命令,或者直接进行搜索的功能。

这里的列表表示的许多使用’‘,’'管理起来的东西。数组是指得存在相关字母的字符数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值