进程控制

文章目录

  • 进程控制
    • 子程序与父程序区别
    • 进程创建
    • 进程终止
    • 进程等待
    • 进程替换

进程控制

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

子程序与父程序区别

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

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

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

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

进程创建

进程控制_第1张图片

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

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

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

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

进程终止

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

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

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

进程控制_第2张图片


僵尸进程:而父进程并没有调用 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)

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

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

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

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


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

进程控制_第3张图片

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

进程控制_第4张图片

进程替换

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

进程控制_第5张图片

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

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

你可能感兴趣的:(C,c++,c++)