《操作系统导论》笔记(4、插叙:进程API)

本文介绍了操作系统中用于进程控制的三个关键API:fork()用于创建子进程,wait()让父进程等待子进程结束,exec()则允许子进程执行新的程序。在fork()和exec()之间,shell可以执行额外的代码,改变环境。这种设计为进程交互提供了灵活性。
摘要由CSDN通过智能技术生成

4 插叙:进程API

4.1 fork()系统调用

fork()创建一个新进程。新创建的进程叫子进程,原来的进程称为父进程。子进程不会从main()函数开始执行,而是直接从fork()系统调用返回

父进程获得的返回值是新创建的子进程的PID,而子进程获得的返回值是0

4.2 wait()系统调用

有时候父进程需要等待子进程执行完毕

image-20211026115506790
image-20211026115548452

4.3 exec()系统调用

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

image-20211027105629790

子进程通过调用execvp()来运行字符计数程序wc,它针对源代码文p3.c运行wc。

exec()给定可执行程序的名称(wc)及需要的参数(p3.c),exec()会从可执行程序中加载代码和静态数据,并用它覆写自己的代码段(及静态数据),堆、栈及其他内存空间也会被重新初始化。

然后操作系统执行该程序,将参数通过argv传递给该进程。因此,它并没有创建新进程而是直接将当前运行的程序(p3)替换为不同的运行程序(wc)

4.4 为什么这样设计API

给了shell在fork之后exec之前运行代码的机会,这些代码可以在运行新程序前改变环境

image-20211027184224447
image-20211027191927826

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值