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

小企业网站制作谷歌浏览器中文手机版

小企业网站制作,谷歌浏览器中文手机版,专业产品画册设计公司,网站被盗用目录 1.进程创建 1.1fork()函数初识 1.2写时拷贝 1. 提升系统效率 2. 隔离错误影响 3. 支持并行计算 2.进程终止: 2.1进程退出场景: 2.2进程常见退出方法: 2.3_exit()系统调用接口 2.4exit函数 2.5return退出 1.进程创建 1.1for…

目录

1.进程创建

1.1fork()函数初识

1.2写时拷贝

1. 提升系统效率

2. 隔离错误影响

3. 支持并行计算

2.进程终止:

2.1进程退出场景:

2.2进程常见退出方法:

2.3_exit()系统调用接口

2.4exit函数

2.5return退出


1.进程创建

1.1fork()函数初识

在linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原就进程为父进程

#include<unistd.h>
pid_t fork(void);
返回值:子进程返回0,父进程返回子进程的pid,创建失败返回-1

进程调用fork,当同志转移到内核中的fork代码后,内核做:

  • 分配新的内存块和内核数据结构给子进程
  • 将父进程部分数据结构内容拷贝至子进程
  • 添加子进程到系统进程列表当中
  • fork返回,开始调度器调度

当一个进程调用fork之后,就有两个二进制代码相同的进程。而且它们都运行到相同的地方。但每个进程都将可以开始它们自己的旅程,看如下程序:

##include<unistd.h>
#include<stdio.h>
#include <sys/types.h>
#include<stdlib.h>
int main()
{pid_t pid;printf("Before: pid is %d\n", getpid());if((pid=fork())==-1){perror("fork()");exit(1);}printf("After:pid is %d, fork return %d\n",getpid(),pid);sleep(1);return 0;
}

这里看到了三行代码,一行befor,进程28791先打印before消息,然后它有打印after。另一个after消息有28791打印的。注意到进程28791没有打印before,为什么呢?如下图

所以,fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器决定。

(小扩展:在Linux操作系统中,调度器是一个负责分配CPU资源给不同进程的子系统。调度器的主要作用是根据不同的调度算法,决定哪个进程可以获得CPU时间片,以实现进程间的公平竞争和高效利用CPU资源。Linux操作系统中有多种调度器可供选择,如CFS (Completely Fair Scheduler)、O(1)调度器等。通过调度器的工作,Linux操作系统能够有效地管理进程的运行顺序,提高系统性能和响应速度.)

1.2写时拷贝

了解写时拷贝之前,我们得先知道,为什么要在一个进程之中,创建一个子进程?子进程的作用是什么?

1. 提升系统效率

当父进程需要完成多个独立的任务时,它可以创建若干个子进程分别执行这些任务。这种方式使得父进程无需等待某个任务完成后才能继续下一个任务,而是可以在等待期间执行其他工作或者进入休眠状态以节省资源。

2. 隔离错误影响

子进程与父进程之间存在一定的隔离机制。即使子进程中出现了致命错误(如段错误),通常也不会直接影响到父进程及其正常运行流程。这种设计有助于增强整个程序架构的安全性和稳定性。

3. 支持并行计算

现代计算机硬件大多具备多核处理器能力,利用子进程可以让不同CPU核心同时处理不同的数据集或算法部分,进而充分利用硬件资源达到加速目的。

所以:子进程需要与执行与父进程不同的代码段。例如:父进程等待客户端申请,生成子进程来处理请求。

于是,我们就需要写时拷贝。

通常、父子代码共享,父子再不写入时,数据也是共享的,当任意一方试图写入,便以写时拷贝的方式各自一份副本。

2.进程终止:

2.1进程退出场景:

  1. 代码运行完毕,结果正确
  2. 代码运行完毕,结果不正确
  3. 代码异常终止

1、2中,统一会采用进程的退出码进行判定结果是否正确。

进程退出码有什么作用?(一般而言,父进程会关心子进程的完成情况,所以需要子进程退出码来判断子进程完成情况)

2.2进程常见退出方法:

正常终止(可以通过echo $? 查看进程退出码---最后一次进程的退出码):

  1. 从main返回
  2. 调用exit
  3. _exit

main函数的返回值,本质表示:进程运行完成时是否是正常的结果,如果不是,可以用不同的数字,表示不同的出错原因

异常退出:ctrl + c,信号终止

进程出现异常,本质是我们的进程收到了对应的信号

2.3_exit()系统调用接口

参数:status定义了进程的终止状态,父进程通过wait来获取该值

说明:虽然status是int,但是仅有低8位可以被父进程所用。所以_exit(-1)时,在终端执行$?发现返回值是255(下一章--进程等待会详细讲关于status的存储)

2.4exit函数

#include<unistd.h>
void exit(int status);

exit最后也会调用_exit,但在调用_exit之前,还做了其他工作

  1. 执行用户通过atexit或on_exit定义的清理函数
  2. 关闭所有打开的流,所有的缓存数据均被写入
  3. 调用_exit

#include <stdio.h>
#include <stdlib.h>void cleanup_function(){printf("Cleanup function called.\n");
}int main(){atexit(cleanup_function);puts("Before calling exit.");exit(0); // This will call the registered 'cleanup_function'
}

#include <stdio.h>
#include <unistd.h> int main(void){char buffer[]="This message may be lost\n";fwrite(buffer , sizeof(char), strlen(buffer)-1 , stdout );_exit(0); // No flushing occurs here so output might get discarded.
}

2.5return退出

return是一种更常见的退出进程的方法。执行return n等同于执行exit(n),因为调用main的运行时函数会将main的返回值当作exit参数

http://www.dtcms.com/wzjs/88209.html

相关文章:

  • 网络推广的优势seo网站推广免费
  • 网站建设必须要备案吗企业网站设计素材
  • 网站怎样排名靠前什么是网络营销推广
  • 大连网站建设解决方案搜索引擎优化指的是什么
  • 无锡网站开发befen企业网络策划
  • 教育类网站如何做windows优化大师卸载
  • 网站优化推广软件娄底地seo
  • 单位网站建设总结百度健康人工客服电话24小时
  • 中国民主促进会网站网站模板下载免费
  • 江门做网站公司开网络公司新产品市场推广方案
  • 学院网站建设服务招生宣传app推广公司
  • 域名解析怎么弄app搜索优化
  • bugku中网站被黑怎么做sem竞价推广怎么做
  • 建设邮费自己的网站 要不要购买服务器的怎么做推广网站
  • 信阳建设监理协会网站seo平台怎么样
  • 聊城建设工程质量信息网站seo服务深圳
  • 广州市专注网站建设公司建一个外贸独立站大约多少钱
  • 做新闻微网站有哪些方面站长统计入口
  • 做网络课堂的平台有哪些网站白帽seo公司
  • 给上市公司做网站有什么用seo排名查询工具
  • 怎么用记事本做钓鱼网站今天的新闻发布会
  • 莘县做网站优化搜索曝光次数的方法
  • 门户网站建设管理典型经验中小企业网站
  • 怎么自己制作软件app电商seo优化是什么意思
  • 免费观看b站的广告网站平台点击排名软件哪个好
  • 甘肃永靖建设住建局网站在线工具网站
  • 网站建设公司费用每日新闻摘要30条
  • 做网站UI工具营销网站建设大概费用
  • 企业信息公共服务平台海外seo
  • 抚州市建设局官方网站app推广拉新一手渠道代理