网站建设案例图片,dw网站制作流程,汉中市建设工程招投标信息网官网,网站的设计制作流程目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分#xff1a;
进程创建进程终止进程等待进程替换
一、进程创建
常见的创建进程的函数有两个#xff1a;
pid_t fork(void)pid_t vf…
目录一、进程创建1.fork2.vfork二、进程终止三、进程等待四、进程替换1.理解程序替换2.子进程在程序替换中的作用Linux的进程控制分为四部分
进程创建进程终止进程等待进程替换
一、进程创建
常见的创建进程的函数有两个
pid_t fork(void)pid_t vfork(void)
这两个函数的实现方式有所不同其中我们最常用的还是frok函数。
1.fork fork函数以写时拷贝的方式创建一个子进程子进程复制父进程的pcb、虚拟空间、页表。因此父子进程代码共享但数据独享互不干涉。 2.vfork vfrok函数创建子进程子进程只复制父进程的pcb虚拟内存和页表是父子进程共用的。 二、进程终止 进程终止就是终止一个进程也就是退出进程。但进程的退出也是分情况的分为正常退出和异常退出
正常退出运行了exit、_exit、return语句导致的退出异常退出程序出错导致的退出 正常退出就是程序员在代码中规定的规定程序运行到这里就应该退出因此使用了exit、_exit、return来控制进程在合适的位置退出这种退出是在人为的控制下发生的因此是正常退出。 异常退出则是程序在运行时发生了预料之外的错误比如对空指针进行解引用等错误操作这些错误操作使得程序崩溃退出是不属于人为控制的因此是异常退出。
三、进程等待 什么是进程等待 1父进程创建子进程后等待子进程退出子进程退出后父进程获取子进程的退出返回值释放子进程的资源避免僵尸进程产生。因为僵尸进程产生的原因就是子进程先于父进程退出通知父进程后父进程没有处理子进程的后事导致子进程变成了僵尸进程。 2为了避免父进程没有接收到子进程的退出通知从而产生僵尸进程。父进程创建子进程后就一直等待子进程的退出通知子进程一退出父进程就马上处理避免僵尸进程的产生。这就是进程等待。 常用来实现进程等待的函数有两个
pid_t wait(int *stat_loc);pid_t waitpid(pid_t pid, int *stat_loc, int options); 这两个函数都可以用来处理退出的子进程它们的详细使用放在了另一篇文章。
四、进程替换
1.理解程序替换 什么是进程替换 假如此时系统正在运行A程序这样就有A程序对应的pcb然后操作系统把另一个程序B从硬盘加载到内存中让A程序的pcb断开与A程序的联系去操作B程序同时修改进程的页表映射信息更改为新程序的数据这就是进程替换。程序替换后pcd的ID是不变的因为并没有新创建pcb使用的还是原来的pcb 如下图此时运行的是A程序页表、虚拟空间、pcb中都是A程序的相关信息。 如下图加载B程序到内存中。 如下图进程pcb不再控制A程序而是去控制B程序。并且将页表、虚拟空间初始化为B程序的相关信息同时pcb中也会修改一些对应的信息。 2.子进程在程序替换中的作用 1父进程创建子进程后最能体现子进程价值的就是程序替换。刚开始接触子进程时我们只是通过创建子进程后父子进程的函数返回值来区分父子进程区分后让父子进程进入不同的代码分支执行程序。 2但这样总感觉有点浪费子进程因为作为一个代码分支来说它所能包含的程序自然不能过多否则整个程序就显得臃肿或复杂。但是如果不能包含过多的程序也就意味着代码分支并不能实现太过复杂的功能。这样就不太过瘾有点浪费子进程的性能。 3所以我们可以将要实现的功能单独做成一个程序让子进程进行程序替换后去运行这个程序这样不但让代码不臃肿还让代码的功能更强大。所以程序替换才是子进程的最佳选择。 程序替换常使用的函数都在exec函数簇中关于它们的使用会在另一篇文章讲到。