当前位置: 首页 > news >正文

中国企业网站开发绵阳新农网的网站是哪个公司做的

中国企业网站开发,绵阳新农网的网站是哪个公司做的,企业简介ppt范文大全免费,织梦网站搬迁目录 一、前言 二、 进程创建的初次了解#xff08;创建进程的原理#xff09; 三、什么是fork函数#xff1f; #x1f4a6;初识fork函数 #x1f4a6;fork函数的四个为什么#xff1f; ⭐为什么fork()要给子进程返回0#xff0c;给父进程返回子进程pid#xff… 目录 一、前言 二、 进程创建的初次了解创建进程的原理 三、什么是fork函数  初识fork函数 fork函数的四个为什么  ⭐为什么fork()要给子进程返回0给父进程返回子进程pid ⭐一个函数是如何做到返回两次的如何理解 ⭐fork()函数究竟在干什么干了什么 ⭐ 一个变量怎么会有不同的内容呢 四、总结  五、共勉  一、前言 在之前的博客中已经详细的讲解了什么是进程包括了进程的概念进程与操作系统的关系如何查看进程等。         所以本次博客将详细讲解如何创建一个进程让大家更加深入的了解进程 二、 进程创建的初次了解创建进程的原理 创建新进程在Linux的下是由父进程来完成的创建完成的新进程是子进程。 新进程的地址空间有两种可能性 子进程是父进程的复制品除了PID和task_struct是子进程自己的其余的都从父进程复制而来子进程装入另一个程序。 在Linux下的fork函数用于创建一个新的进程使用fork函数来创建一个进程时子进程只是完全复制父进程的资源。这样得到的子进程和父进程是独立的具有良好的并发性。但是进程间通信需要专门的机制。 三、什么是fork函数  之前我们在Linux下启动一个进程的时候利用的是./可执行程序那是否有其他办法去启动一个进程呢  初识fork函数 当然是有的那就是使用fork()这个函数。在使用之前呢我们要先去查看一下这个函数该如何使用------ 使用man 手册查询一下 fork 函数的使用 man 2 fork 可以看到这个函数的功能就是去创建一个子进程其返回值为pid_t注意这里的 pid_t 类型 是无符号整数 ​ 函数说明 通过复制调用进程创建一个新进程。 fork 有两个返回值。 父子进程代码共享数据各自私有一份采用写时拷贝。 接下来我们来测试一段代码 #include stdio.h #include stdlib.h #include unistd.h // getpid, getppid, fork, sleep #include sys/types.h // getpid, getppidint main() {printf(before: I am a process\n);fork();printf(after: 创建一个新进程\n);return 0; } 通过执行结果我们可以看到虽然只有一句after: 创建一个新进程但是在【fork】之后却打印了两句 ​ 那有的同学就会感到非常地好奇这是为什么呢 因为在【fork】之后会产生两个执行的进程。但有同学还是会觉得很怪这怎么就变成了两个进程了呢我们可以去查询一下这个单词的意思发现其确实是有分叉的意思。所以在执行了这个函数后就会存在两个执行流 ​ 如果想要更加清楚地了解这个函数我们还需要再查看一下man手册然后看到 如果成功则会给父进程返回子进程的PID给子进程返回0如果失败的话则会给父进程返回-1 ​         当我们知道原理后在代码中输出进程PID看是否和我们的fork理解一样让我们一起来验证一下吧 #include stdio.h #include stdlib.h #include unistd.h // getpid, getppid, fork, sleep #include sys/types.h // getpid, getppid int main() {id_t id getpid();printf(before: I am a process,我的进程PID为%d\n,id);fork();printf(after: 创建一个新进程,我的进程PID为%d, 我的父进程PPID为%d\n,getpid(),getppid()); return 0; }​ 那接下去我们就根据这个返回值去举个例子看看 下面是测试的代码  int main() {printf(fork之前I am a process,pid: %d, ppid: %d\n,getpid(),getppid());sleep(5);printf(开始创建进程啦\n);sleep(1);pid_t id fork();if(id 0){return 1;}else if(id 0){while(1){// 子进程 printf(fork之后, 我是子进程I am a process,pid: %d, ppid: %d,return id: %d\n,getpid(),getp pid(),id); sleep(1);}}else{while(1){// 父进程printf(fork之后我是父进程I am a process,pid: %d, ppid: %d,return id: %d\n,getpid(),getp pid(),id);sleep(1);}}sleep(2);return 0;}然后将进程挂起后我们来看看在第一句执行完后父子进程竟然是一起执行的if...else...分支可以同时进去并且还有两个死循环在同时跑。这是为什么呢 ​ 分析 我们来分析一下这个进程的创建过程首先我们可以看到我们在这个PPID为【24609】的 bash 上执行了一个进程那么操作系统就会为这个进程分配一个PID为【12484】接下去这个进程被操作系统调度执行自己的代码执行到内部代码的fork函数时执行流被一分为二变成了两个执行分支一个是父进程它自己另一个则是子进程新的分支 所以现在我们可以得出创建进程的两种方式 ./运行我们的程序 - - 指令层面---------bashfork() - - 代码层面 fork函数的四个为什么  ⭐为什么fork()要给子进程返回0给父进程返回子进程pid 上面我们说到当进程的代码执行到fork()函数的时候会将执行流一分为二父子进程通过不同的 id 返回值来区分以此执行不同的代码块。那其实很好理解了因为父子进程是两个不同的进程所以需要根据这个不同的返回值来进程区别 ​ 那有同学说你这不说了跟没说一样嘛要区分的话当然得不同了那为什么父进程得到的是子进程的PID但是子进程却是0呢为什么不可以倒过来 这位同学你问到点子上了确实这是它们最大的区别不过呢这样的返回值还是有原因的。读者可以这么来理解一个父亲可以有多个孩子但是呢一个孩子却只能有一个父亲 父亲所获取到的返回值是子进程的PID是由于他要靠不同的PID值来区分不同的孩子但子进程的返回值都是0的原因在于他一定只对应着某一个父进程只需让父进程知道它被成功创建出来了即可 ⭐一个函数是如何做到返回两次的如何理解 上面讲到了因为在某些情况下需要依靠父子进程去执行不同的两段逻辑所以在创建子进程后父子进程它们分别会得到不同的两个值 那既然在调用了fork()函数后就肯定需要去返回两次才可以。这里我们再通过画图来分析一下既然这个fork()是库函数的话那执行到这一句的时候就一定会跳转到库中的这一逻辑中去执行【创建子进程】的这一步的步骤但是这还是无法说明他可是有不同的返回值呀那我这时候就要问了最后的这个return语句算是代码吗 当然了那我们在上面说到过这个代码呢是父子进程共享的那么父进程返回一次子进程返回一次也就相当于返回了两次   ⭐fork()函数究竟在干什么干了什么 在上面我们讲到过【进程 内核数据结构 代码与数据】当我们在执行完fork()函数后子进程被创建出来那么它的PCB结构体即 task_struct 会被构建出来我们知道的是在每个进程的结构体中有PID和PPID这两个成员而且对于子进程中的PPID恰好就是父进程中的PID 。所以子进程大部分的属性就是以父进程为模版创建的相当于把父进程拷贝了一份对部分属性做了修改        可以看出子进程被创建出来后系统中多了一个进程那么对于父进程来说它有自己的内核数据结构、代码和数据子进程也按照父进程的PCB模拟了一块出来   那我现在要问了请问子进程的数据和代码呢也是拷贝出来的吗  那有的同学就说都属于不同的两个进程了总会有自己的代码和数据吧。诶这个说得就不对了对于子进程来说虽然它有自己的内核数据结构但它在一创建出来的时候并没有独属于自己的【代码和数据】而也是使用和父进程一样的同一份代码和数据   ⭐一个变量怎么会有不同的内容呢 在我们上面的代码中我们会发现 id 这个变量会有两个不同的值这是为什么呢 因为父子进程使用的是不同的PCB所以当CPU调度不同进程访问的是不同的数据它们在数据上割裂了那一个进程运行时就不会影响另一个进程了。也就是双方虽然共享数据但是不能对数据进行修改若要是想对数据进行修改的话就对数据进行拷贝去修改拷贝出去的那一份。 总结当进程里数据没有发生修改时。那么子进程和父进程共享代码和数据如果有一个进程的数据发送了修改那么会对数据发送写实拷贝而代码依旧是共享的     如果发生修改那么父进程的代码数据会进行一份实时拷贝给子进程。     四、总结  1.子进程是由父进程的模板创建的2.子进程和父进程一般情况下共享代码和数据但如果有一方的数据或代码被修改那么操作系统会写实拷贝一份。3.fork函数不是真的有2个返回值而是两个进程都在fork函数执行了返回操作。4.fork返回父进程子进程的PID给子进程返回0进程创建失败返回-1 五、共勉  以下就是我对【Linux系统编程】如何创建进程的理解如果有不懂和发现问题的小伙伴请在评论区说出来哦同时我还会继续更新对【Linux系统编程】进程状态的理解请持续关注我哦
http://www.w-s-a.com/news/432604/

相关文章:

  • 网站域名注销备案徐州房产网
  • 筑聘网windows优化大师自动安装
  • 龙华高端网站设计门户网站建设方案公司
  • 网站开发作用网站建设哪家专业
  • 网站设计报告总结南宁商城网站推广公司
  • 淘宝做店招的网站免费网站建设自助建站
  • 重庆工信部网站绵阳公司网站建设
  • 购物网站开发流程制作企业网页
  • 定州哪里可以做网站建设项目环境影响登记表备案系统网站
  • 网站建设费属于广告费小猪网站怎么做的
  • 国内优秀设计网站站长哈尔滨微网站建设
  • 如何建设一个优秀的电商网站沐风seo
  • 从零开始学网站建设知乎安防网站下载
  • 打开网站弹出qq应用软件有哪些
  • 温州网站建设seo网站 如何做 中英文切换
  • 聊城做网站的公司资讯信阳 网站建设
  • 天津市工程建设交易网站查汗国珠海 网页设计
  • 龙果学院大型网站稳定性建设汾阳做网站
  • 湖北 个人网站备案时间域名查询备案查询
  • 网站推广方式校园网站怎么建
  • 长沙seo网站排名怎么在百度发帖
  • 织梦贷款网站模板做印章网站
  • 彭州做网站上海百度网络推广
  • 广州网站搭建快速提升网站排名荧光字网站
  • 15年做那些网站能致富做seo是什么意思
  • 各电商网站的特点网站制作2007
  • 用html做一号店网站怎么做公众号注册平台官网
  • 做盈利网站怎么备案vs做网站如何调试
  • 嘉兴做营销型网站廊坊做网站外包
  • 双语网站模板常州做网站的公司