北京建设项目管理有限公司网站,企业百度网站怎么做,做网站必须会编程吗,杭州做官网的有哪些公司目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序#xff0c;如果一个程序较为庞大#xff0c;我们可以给这个程序创建多个进程#xff0c;每个进程负责一部分代码的运行。 A进程如果创建了B进程如果一个程序较为庞大我们可以给这个程序创建多个进程每个进程负责一部分代码的运行。 A进程如果创建了B进程A进程就是B进程的父进程B进程就是A进程的子进程。当然B进程还可以接着创建子进程创建出的子进程又可以创建子进程…… 但一般我们不会这么做的因为这样太过复杂控制起来比较难。
一、了解子进程 简单来说子进程就是父进程创造的、来帮父进程干活的进程。比如领导都不亲自干活干活都是交给下属去做的。父进程就是领导子进程就是下属。 子进程在创建出来以后从创建子进程的那行开始子进程和父进程运行的是一模一样的代码。 如图有10行代码父进程运行到第5行的时候创建了一个子进程子进程创建出来以后就和父进程运行着相同的代码。 二、创建子进程
1.创建子进程 用专门的函数来创建子进程常使用 pid_t fork(void) 这个函数来创建一个子进程。但并不是只有这个函数才可以创建子进程还有其他的函数。
2.区分父子进程 pid_t fork(void)这个函数最终会有一个返回值返回一个pid_t类型的数据在返回这个数据之前子进程就已经创建好了。 所以在返回数据的时候父进程就已经创建出来子进程了。因此父进程和子进程都有一个该函数的返回值并且父子进程的返回值不同这个一定要记住。 对于父进程来说这个函数的返回值是子进程的pidpid是大于0的对于子进程来说这个函数的返回值是0。如果子进程创建失败函数的返回值就是小于0的数。 通过父子进程返回值的不同我们可以区分父子进程让父子进程进入不同的代码分支执行程序。 可以看一下下面这段代码
#includestdio.h
#includeunistd.h
#includestdlib.h
/*
创建子进程通过父进程和子进程返回值的不同使得父进程和子进程执行不同的代码分支
*/int main(){//创建子进程pid_t valfork();//判断父子进程if(val0){ //返回值小于0说明子进程创建失败printf(create error\n);}else if(val0){ //返回值等于0说明进入这里的是子进程printf(this is son\n);}else{ //返回值大于0说明进入这里的是父进程printf(this is father\n);}
}
三、理解子进程 1.创建子进程的本质是什么 创建子进程其实是通过复制父进程来创建子进程。因为进程的信息保存在pcb中因此创建子进程其实就是复制父进程的pcb中的大部分信息用这些信息来创建子进程的pcb。这些信息有内存指针、上下文数据等。 2.复制内存指针的意义是什么 内存指针指向程序代码在内存中的位置复制内存指针意味着子进程和父进程运行的代码是一样的。 3.复制上下文的意义是什么 1上下文代表了程序的执行状态上文是程序已经执行过的指令和数据下文是将要执行的指令和数据。 2子进程复制父进程的上下文数据意味着子进程复制了父进程的运行位置也就是说子进程知道父进程创建子进程的时候父进程运行到哪里了。为了方便我们把这个位置叫做创建点。 3意味着子进程会从创建点开始运行在创建子进程后父子进程都会开始运行相同的代码。这一点可以根据上文的图片来理解。
四、创建子进程的意义 1父子进程运行的功能相同在大量任务处理中子进程可以用来分担压力。因为我们可以通过函数返回值的不同区分父子进程从而使父子进程进入不同的代码分支。 2子进程可以用来做危险的事情即便崩溃也不会影响到父进程。因此危险的事情可以让子进程做父进程负责统筹兼顾。 3子进程的作用主要是用在程序替换中程序替换就是让子进程去运行另一个程序。