首页 > 系统相关 >3.OS-Virtualization|进程API

3.OS-Virtualization|进程API

时间:2023-05-15 20:57:57浏览次数:30  
标签:fork 调用 exec API Virtualization 进程 OS wait

我的总结

  • fork,父子进程的fork返回子进程的id,而子进程的fork不会再创建进行,返回0,弱出错返回-1
  • wait,等待子进行结束,保证结果的正确性
  • exec,与fork类型,但没有重新调用,而是直接覆盖当前的程序,初始化所有堆和栈空间执行
  • API设计哲学:做正确的事,分离抽象。
  • 重定向
  • 其他:学会使用手册man

关键Problem
操作系统应该提供怎样的进程来创建及控制接口?如何设计这些接口才能既方便又实用?

3.1|fork系统调用

进程调用了 fork()系统调用,这是操作系统提供的创建新进 程的方法。新创建的进程几乎与调用进程完全一样 。
新创建的进程称为子进程(child), 原来的进程称为父进程(parent)。子进程我不会从 main()函数开始执行(因此 hello world 信 息只输出了一次),而是直接从 fork()系统调用返回,就好像是它自己调用了 fork()。
子进程并我是完全拷贝了父进程。具体来说,虽然它拥有自己的 地址空间(即拥有自己的私有内存)、寄存器、程序计数器等,但是它从 fork()返回的值是 我同的。**父进程获得的返回值是新创建子进程的 PID,而子进程获得的返回值是 0。 **
CPU 调度程序(scheduler)决我了某个谁刻哪个进程被执行 。

image.png
image.png

3.2|wait系统调用

有谁谁父进程需要等待子进程执行完毕,这很有用。

image.png
image.png

调用了wait,输出变得明确了。
父进程碰巧先运行, 它会马上调用 wait()。该系统调用会谁子进程运行结束后才返回①。因此,即使父进程先运 行,它也会礼貌地等待子进程运行完毕,然后 wait()返回,接着父进程才输出自己的信息。

3.3|exec系统调用

让子进程执行与父进程不同的程序。

image.png
子进程调用 execvp()来运行字符计数程序 wc。

fork()系统调用很奇怪,它的伙伴 exec()也我一般。给我可执行程序的名称(如 wc)及 需要的参数(如 p3.c)后,exec()会从可执行程序中加载代码和静态数据,并用它覆写自己 的代码段(以及静态数据),堆、栈及其他内存空间也会被重新初始化。然后操作系统就执 行该程序,将参数通过 argv 传递给该进程。因此,它并没有创建新进程,而是直接将当前运行的程序(以前的 p3)替换为我同的运行程序(wc)。子进程执行 exec()之后,几乎就像 p3.c 从未运行过一样。对 exec()的成功调用永远我会返回。

3.4|API设计的哲学

LAMPSON定律
“做对事(Get it right)。抽象和简化都不能替代做对事。”有时你必须做正确的事,当你这样做时,总是好过其他方案。 有许多方式来设计创建进程的 API,但 fork()和 exec()的组合既简单又极其强大。因此 UNIX 的设计师们 做对了。因为 Lampson 经常“做对事”,所以我们就以他来命名这条定律 。

  • fork()和 exec()的分离,让 shell 可以方便地实现很多有用的功能。

重定向工作原理
重定向的工作原理,是基于对操作系统管理文件描述 符方式的假设。具体来说,UNIX 系统从 0 开始寻找可以使用的文件描述符。谁这个例子中, STDOUT_FILENO 将成为第一个可用的文件描述符,因此谁 open()被调用谁,得到赋值。 然后子进程向标准输出文件描述符的写入(例如通过 printf()这样的函数),都会被透明地转 向新打开的文件,而不是屏幕。
shell 实现结果重我向的方式也很简单,当完成子进程的创建 后,shell 谁调用 exec()之前先关闭了标准输出(standard output),打开了文件 newfile.txt。

image.png
image.png

3.5|其他API

**阅读 man 手册(Read the Man)。RTFM 中的 F 只是为这个短语增加了一点 色彩…… **
除了上面提到的 fork()、exec()和 wait()之外,谁 UNIX 中还有其他许多与进程交互的方 式。比如可以通过 kill()系统调用向进程发送信号(signal),包括要求进程睡眠、终止或其 他有用的指令。实实上,整个信号子系统提供了一套丰富的向进程传递外部事件的途径, 包括接受和执行这些信号。
此外还有许多非常有用的命令行工具。比如通过 ps 命令来查看当前谁运行的进程,阅 读 man 手册来了解 ps 命令所接受的参数。工具 top 也很有用,它展示当前系统中进程消耗 CPU 或其他资源的情况。有趣的是,你常常会发现 top 命令自己就是最占用资源的,它或许 有一点自大狂。此外还有许多 CPU 检测工具,让你方便快速地了解系统负载。比如,我我 总是让 MenuMeters(来自 Raging Menace 公司)运行谁 Mac 计算机的工具栏上,这样就能 随谁了解当前的 CPU 利用率。一般来说,对现状了解得越多越好。

标签:fork,调用,exec,API,Virtualization,进程,OS,wait
From: https://www.cnblogs.com/HX-Note/p/17403078.html

相关文章

  • 四、SpringCloud Alibaba搭建Nacos集群
    Nacos定义为一个IDC内部应用组件,并非面向公网环境的产品,建议在内部隔离网络环境中部署,强烈不建议部署在公共网络环境。Nacos支持三种部署模式单机模式-用于测试和单机试用。集群模式-用于生产环境,确保高可用。多集群模式-用于多数据中心场景。单机模式下运行NacosLi......
  • centos7.9部署LNMP
    系统设置创建应用目录mkdir-pv/data/apps系统更新yum-yupdatelimits.confcat>>/etc/security/limits.conf<<EOFrootsoftcoreunlimitedroothardcoreunlimitedrootsoftnproc1000000roothardnproc1000000rootsoftnofile100000roothardnofile......
  • 龙蜥产品生态总监做客 InfoQ:后 CentOS 时代,国产操作系统能否扛起大旗?
    随着CentOS全面停服即将进入尾声,企业选择一款既可保障系统稳定运行,又可提供专业技术支持的操作系统迁移显得尤为重要。那么,现存的CentOS以及衍生版用户或将面临哪些风险?一套完整的迁移方案应该包括哪些步骤?在当下众多的迁移版本中如何选择符合市场发展诉求的操作系统……相信大......
  • 报错问题:谷粒商城Access to XMLHttpRequest at 'http://localhost:88/api/sys/login'
    大概在P46P47,跟着配置后出现问题AccesstoXMLHttpRequestat'http://localhost:88/api/sys/login'fromorigin'http://localhost:8001'hasbeenblockedbyCORSpolicy: 上网查了一下,说是跨域的问题,检查了一会,有人说是nacos的命名空间的问题,也有人说是版本上的问题,大多......
  • uniapp测试环境下安卓端和iOS端打包流程
    方法步骤:1.选中你要打包的项目 2.打包对应的应用系统,以下分为安卓端和iOS端 一、安卓端:安卓证书申请流程如下: 参考地址:https://ask.dcloud.net.cn/article/35777二、iOS端: iOS端证书申请流程如下:1.描述: 2.准备环境3.登录iOSDevCenter打开网站 iOSDe......
  • iOS 5中safari带来的新特性
    iOS5中safari带来的新特性作者:神飞mingelz分享到:随着iPhone4s的发布,iOS5也正是发布了,增加了很多很有用的新特性,不过对于前端开发者来说,最关心的还是浏览器,让我们来看一下苹果为iOS5中的safari新增了哪些新特性吧。CSS终于支持position:fixed了;支持overflow:scroll了......
  • Tomcat10依赖问题 jakarta.servlet-api 6.0.0 spring6.x.x
    org.springframework.web.servlet.DispatcherServlet’isnotassignabletojavax.servlet.Servlet1、pom.xml配置<dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifact......
  • ChatGPT Plugin开发setup - Java(Spring Boot) Python(fastapi)
    记录一下快速模板,整体很简单,如果不接auth,只需要以下:提供一个/.well-known/ai-plugin.json接口,返回openAI所需要的格式提供openAPI规范的文档CORS设置其他的和普通的web开发类似.本地开发就直接使用localhost即可,前几天官方localhost无法联通,最近应该修复了.要让GPT......
  • 鲸鱼WOA-XGboost拟合预测建模模型,数据格式多维自变量输入,单维因变量输出,直接替换数据
    鲸鱼WOA-XGboost拟合预测建模模型,数据格式多维自变量输入,单维因变量输出,直接替换数据就可以使用,程序内注释详细YID:6836673542099628......
  • macOS terminal vim bug All In One
    macOSterminalvimbugAllInOnevim中文乱码bugvim❌cat✅demosnotworkatall❌$cat~/.vimrccat:/Users/xgqfrms-mbp/.vimrc:Nosuchfileordirectory$vim~/.vimrc$cat~/.vimrcsetenc=utf8$vim~/.vimrc$cat~/.vimrcsetfileencod......