文章目录
- 进程控制
- 子程序与父程序区别
- 进程创建
- 进程终止
- 进程等待
- 进程替换
进程控制
多进程是程序进行的基本功能,所需要进行基础控制的操作。用来减少因为单核性能不足的原因造成的系统卡死。
子程序与父程序区别
完全继承父进程相关的内存块和数据块,拷贝到子进程。
完全继承父进程相关的内存块和数据块,拷贝到子进程。
(如果有不同的地方就不与父进程使用相同一个内存的,f子进程与父进程共同拥有同一块地方)
分配新的内存块和内核数据结构给子进程
将父进程部分数据结构内容拷贝至子进程
添加子进程到系统进程列表当中
fork返回,开始调度器调度
当其中的一方的试图进行写入,就需要进行拷贝构造一本的副本。
进程创建
错误返回-1,父亲进程返回子进程id,子进程返回0;(可以利用这个进行子进程的使用,if进行判断是非处于子进程还是父进程进行程序的执行)
使用fork进行子进程进行创建
pia_t if = fork();
if(0 == id){
//代码(子进程)
}
创建失败的原因:进程过多,导致进程错误。
进程终止
直接使用exit或者_eixt进行进程退出。
exit刷新缓冲区然后退出线程,就是将所有的在缓冲区的东西全部清除,然后缓冲区没有任何的东西。
exit(n)的退出相当与turn n;的基本操作相同。而且exit还会返回退出码。(这个对于进程等待后面获取进程退出码有非常多的作用)。
僵尸进程:而父进程并没有调用 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的参数使用了位图的形式储存相关的东西,不同的退出方式有不同的退出码。
因为处理过程之中会发生一些位图的相关操作,不好进行,所以使用函数进行处理这一个数据
进程替换
通过进程替换可跑其他语言的程序在子进程之中,因此引进来相应的函数进行相关的操作。这个过程之中
这里采用之间替换命令,或者直接进行搜索的功能。
这里的列表表示的许多使用’‘,’'管理起来的东西。数组是指得存在相关字母的字符数组。