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

数字货币网站开发广东省阳江网络问政平台

数字货币网站开发,广东省阳江网络问政平台,律师推广网站排名,百度seo优化怎么做文章目录 什么是进程呢#xff1f; 描述进程-PCBtask_struct-PCB的一种task_struct内容分类 查看进程通过系统目录查看通过ps命令查看通过系统调用获取进程的PID和PPID通过系统调用创建进程- fork#xff08;#xff09;函数 fork()函数fork函数做了什么#xff1f;fork之后… 文章目录 什么是进程呢 描述进程-PCBtask_struct-PCB的一种task_struct内容分类 查看进程通过系统目录查看通过ps命令查看通过系统调用获取进程的PID和PPID通过系统调用创建进程- fork函数 fork()函数fork函数做了什么fork之后父子进程谁先运行fork函数的返回值为什么fork会有两个返回值fork的两个返回值 什么是进程呢 运行起来的程序吗 课本概念 程序的一个执行实例正在执行的程序等。 内核观点 担当分配系统资源CPU时间内存的实体。 对于我们所写的代码在进行编译链接之后形成的.exe可执行程序文件这个可执行程序本质上是一个文件是放在磁盘上的。当我们运行这个可执行程序时本质上是将这个程序加载到内存当中了因为只有加载到内存后CPU才能对其进行逐行的语句执行而一旦将这个程序加载到内存后我们就不应该将这个程序再叫做程序了严格意义上将应该将其称之为进程。 其实在我们的程序加载到内存之前操作系统早已经加载到内存中而程序是操作系统将其进行加载拷贝到内存当中的。 描述进程-PCB pcb全程为process control block 进程信息被放在一个叫做进程控制块的数据结构中可以理解为进程属性的集合。 课本上称之为PCBprocess control blockLinux操作系统下的PCB是: task_struct。 我们知道在操作系统中会同时存在多个进程 那么操作系统如何管理呢 结合前面的知识我们知道 应该先描述再组织。操作系统是用C语言写的所以操作系统要想管理进程那么就必须用C语言来描述进程通过进程的各种重要属性来描述进程我们很容易想到结构体。这么多进程结构体里面可以放一些结构体指针将他们链接起来那么对进程的管理就转变成了对链表的增删查改。 所以进程可执行程序内核数据结构PCB task_struct-PCB的一种 在Linux中描述进程的结构体叫做task_struct。 task_struct是Linux内核的一种数据结构它会被装载到RAM(内存)里并且包含着进程的信息。 task_struct内容分类 task_struct就是Linux当中的进程控制块task_struct当中主要包含以下信息 标示符 描述本进程的唯一标示符用来区别其他进程。状态 任务状态退出代码退出信号等。优先级 相对于其他进程的优先级。程序计数器(pc) 程序中即将被执行的下一条指令的地址。内存指针 包括程序代码和进程相关数据的指针还有和其他进程共享的内存块的指针。上下文数据 进程执行时处理器的寄存器中的数据。I/O状态信息 包括显示的I/O请求分配给进程的I/O设备和被进程使用的文件列表。记账信息 可能包括处理器时间总和使用的时钟总和时间限制记账号等。其他信息。 查看进程 通过系统目录查看 根目录下有一个proc的系统文件夹。 文件夹当中包含大量进程信息其中有些子目录的目录名为数字。 这些数字其实是某一进程的PID对应文件夹当中记录着对应进程的各种信息。 通过ps命令查看 ps aux 通过系统调用获取进程的PID和PPID 通过使用系统调用函数getpid和getppid即可分别获取进程的PID和PPID。 我们可以通过一段代码来进行测试。 #include stdio.h #include sys/types.h #include unistd.hint main() {while(1){printf(我是一个进程我的pid是: %d, ppid: %d\n, getpid(), getppid()); // 这个函数只调用了一次sleep(1); }retrun 0; }我们可以通过ps命令查看该进程的信息即可发现通过ps命令得到的进程的PID和PPID与使用系统调用函数getpid和getppid所获取的值相同。 通过系统调用创建进程- fork函数 fork函数创建子进程 fork是一个系统调用级别的函数其功能就是创建一个子进程。 运行以下代码 #include stdio.h #include sys/types.h #include unistd.hint main() {fork();while(1){printf(我是一个进程我的pid是: %d, ppid: %d\n, getpid(), getppid()); // 这个函数只调用了一次sleep(1); // for test}return 0; }运行结果是循环打印两行数据第一行数据是该进程的PID和PPID第二行数据是代码中fork函数创建的子进程的PID和PPID。我们可以发现fork函数创建的进程的PPID就是proc进程的PID也就是说proc进程与fork函数创建的进程之间是父子关系。 每一个进程操作系统就会为其创建PCBfork函数创建的进程也是如此。 fork()函数 fork函数做了什么 上面谈到父进程跟子进程会共享代码和数据会执行相同的代码那么fork之前的代码呢子进程能看到吗 答案是可以看到。 为什么子进程不从头开始执行呢 因为我们的程序从上往下按照顺序去执行pc/eip寄存器执行fork完毕eip指向的是fork后续的代码而eip也会被子进程继承。所以只执行从fork之后的代码。 fork之后父子进程谁先运行 创建完成子进程之后系统的其他进程父进程子进程接下来是要被CPU调度执行的当父子进程的PCB都被创建并在运行队列中排队的时候哪一个进程先运行是不确定的因为哪一个进程的PCB先被CPU选择调度哪个进程就先运行然后谁会先被调度是由各自PCB中的调度信息比如说 时间片优先级等调度器算法共同决定的所以谁先运行是没有明确答案的。 fork函数的返回值 1、如果子进程创建成功在父进程中返回子进程的PID而在子进程中返回0。 2、如果子进程创建失败则在父进程中返回 -1。 既然父进程和子进程获取到fork函数的返回值不同那么我们就可以据此来让父子进程执行不同的代码从而做不同的事。 #include stdio.h #include sys/types.h #include unistd.hint main() {printf(我是一个父进程,我的pid: %d\n, getpid());pid_t id fork();// fork之后用if进行分流if(id 0) return 1;else if(id 0){// childwhile(1){printf(我是子进程: pid: %d, ppid:%d, ret: %d, 我正在执行下载任务, id: %p\n, getpid(), getppid(), id, id);sleep(1);}}else{// parentwhile(1){printf(我是父进程: pid: %d, ppid:%d, ret: %d, 我正在执行播放任务, id: %p\n, getpid(), getppid(), id, id);sleep(1);}} }fork创建出子进程后子进程会进入到 else if 语句的循环打印当中而父进程会进入到 else 语句的循环打印当中。 为什么fork会有两个返回值 Q:如果一个函数执行到了return语句那么他的工作结束了吗 A:是的结束了。 子进程跟父进程代码和数据会共享那么return之前子进程已经被创建出来了而return 语句也是代码所以return 语句也会被子进程共享所以父进程子进程被调度都会执行return 语句从而造成了fork函数有两个返回值。 fork的两个返回值 Q:为什么fork的两个返回值会给父进程返回子进程的pid给子进程返回0呢 在现实生活中一个爹可以对应多个子女BUT儿子只能对应一个爹需要管理子女所以需要得到子女的信息也就是子进程的pid而对于子女来说只需要管理好自己就可以所以不需要得到任何信息即返回0 Q:如何理解同一个变量会有不同的值 A:如果启动一个qq启动微信启动浏览器kill掉微信,qq还在、浏览器还在 如果父子进程父进程被杀掉子进程还在吗子进程被杀掉父进程还在嘛 答案是还在 结合以上两点我们可以推出进程之间运行的时候是具有独立性的 进程的独立性首先是表现在有各自的PCB进程之间不会相互影响 而代码又是只读的不会影响但是数据父子进程是会修改的代码共享数据各个进程必须想办法各自私有一份。 但是一般如果不对数据进行写入的话数据是不会发生拷贝的只有当写入时才会进行拷贝也就是写时拷贝。 总上我们得出了一个结论这个我们以为的同一个地址一定不是简单的物理地址。
http://www.zqtcl.cn/news/130154/

相关文章:

  • 典型的企业网站张家港保税区建设规划局网站
  • 网站设计公司那个好网页设计登录界面模板
  • 做网站的厂家聚美优品网站设计
  • 哈尔滨网站建设效果好网站改版 影响google 404跳首页
  • 廊坊网站推广的公司如何做1个手机网站
  • 网站index.php被修改南京cms建站系统
  • 淘宝网站模板是什么做的北海建设厅网站
  • 我想建个网站想做电商应该怎么入门
  • 广州番禺网站制作推广网站建设徐州百度网络网站
  • 有没有个人做网站的新网站做seo 的效果
  • 做网站和app哪个简单旅游资讯网站建设方案
  • 网站建设考级百度怎样可以搜到自己的网站
  • 自助建站免费自助建站网站广州企业网站
  • 常德论坛尚一网唐山seo网络推广
  • 网站建设预付流程网站设计风格的关键词
  • 常德网站制作怎么做自己的网页
  • 做的网站为什么图片看不了wordpress循环该分类子分类
  • 源码出售网站怎么做一个产品的网络营销方案
  • 安丘营销型网站建设国外教育网站模板
  • 做网站案例百度小说排行榜前十
  • 东昌网站建设公司上传到网站去的文档乱码
  • 如何制作自己的网站链接教程网络营销seo招聘
  • 网站制作资料收集wordpress资源网模板
  • 随州网站设计开发服务做网站制作步骤
  • 东莞凤岗做网站黄山旅游攻略住宿
  • 网站开发常用插件免费库存管理软件哪个好
  • 河池网站开发工程师招聘网如何做品牌运营与推广
  • 做网站运营难吗零基础网站建设教程
  • 深圳蚂蚁网络网站建设wordpress电影主题
  • 网站域名收费吗搜索引擎不收录网站