进程和程序:编写命令解释器sh
### 进程与程序:编写命令解释器sh #### 1. 进程与程序的概念 - **程序**: 是指存储在文件中的机器指令序列,通常由编译器将源代码转换为二进制格式的代码。运行一个程序即意味着将这些机器指令加载到内存中并由处理器依次执行。 - **进程**: 是程序运行时的状态,包括内存空间及相关的环境设置。进程不仅包含了程序的指令,还包括了执行这些指令所需要的内存空间和环境配置。 - **用户空间与系统空间**: Unix系统中将内存划分为用户空间和系统空间。用户空间用于存储进程的数据和指令,而系统空间则用来存放构成内核的指令和数据。 #### 2. Shell: 进程控制与程序执行的工具 - **Shell的功能**: - 运行程序: shell能够启动其他程序。 - 管理输入和输出: 可以配置程序之间的数据交换方式。 - 可编程性: 具有脚本语言的特点,允许用户编写脚本来自动化任务。 - **Shell主循环**: 1. 用户输入命令。 2. Shell创建新进程来运行该命令对应的程序。 3. 将程序从磁盘加载到内存。 4. 程序在其进程中运行直至结束。 - **编写Shell所需学习的内容**: - 如何运行一个程序。 - 如何创建一个进程。 - 如何等待`exit()`函数的执行。 #### 3. 一个程序如何运行另一个程序 - **execvp**: - 通过调用`execvp(progname, arglist)`可以运行另一个程序。 - `execvp`会将当前进程替换为指定的程序,同时传递参数列表。 - **执行流程**: 1. 将指定的程序复制到当前进程。 2. 将指定的字符串数组作为`argv[]`传递给新程序。 3. 运行新程序。 - **exec系统调用**: - `exec`会清除当前进程中的所有指令,并替换为指定的程序。 - 最终运行新的程序。 #### 4. 如何创建新的进程 - **fork()**: - 使用`fork()`可以创建一个新进程。 - `fork()`的工作原理: 1. 分配新的内存块和数据结构。 2. 复制原进程至新进程。 3. 将新进程加入进程集合。 4. 控制权返回给两个进程。 - **fork()返回值**: - 子进程中`fork()`返回0。 - 父进程中`fork()`返回子进程的PID。 - 通过返回值可以区分父进程和子进程。 #### 5. 父进程如何等待子进程结束 - **wait()**: - 使用`pid = wait(&status)`可以让父进程等待子进程结束。 - `wait()`会暂停调用进程直到子进程结束,并获取子进程结束时传递给`exit()`的值。 - **wait()的执行流程**: 1. 暂停调用进程直到子进程结束。 2. 获取子进程结束时传递给`exit()`的值。 3. 返回子进程的PID。 4. 如果`statusptr`不为空,则将退出状态或信号编号复制到`statusptr`指向的整数中。 #### 6. 小结: Shell如何运行程序 - Shell通过以下步骤运行程序: - 使用`fork()`创建新进程。 - 在新进程中使用`exec`运行用户指定的程序。 - 使用`wait()`等待新进程结束并获取退出状态或信号序号。 #### 7. 进程编程 - **call/return机制**: - C程序中的函数调用和返回机制也适用于进程间通信。 - 类似于函数调用/返回,进程间也可以通过`fork()/exec()`和`exit()`/`wait()`实现通信。 - **exec/exit机制**: - 一个C程序可以通过`fork()/exec()`启动另一个程序,并传递参数。 - 被启动的程序通过`exit(n)`返回值。 - 调用进程可通过`wait(&result)`获取`exit`的返回值。 通过以上内容的学习,我们可以更好地理解进程和程序的概念,以及如何使用Unix系统中的Shell来管理和执行程序。这对于深入理解操作系统工作原理和进行系统级编程具有重要意义。
- 粉丝: 26
- 资源: 632
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 小说网站-JAVA-基于springBoot“西贝”小说网站的设计与实现
- 游戏分享网站-JAVA-基于springBoot“腾达”游戏分享网站的设计与实现
- 学习交流-JAVA-基于springBoot“非学勿扰”学习交流平台设计与实现
- EDAfloorplanning
- 所有课程均提供 Python 复习部分.zip
- 所有算法均在 Python 3 中实现,是 hacktoberfest2020 的一个项目 - 没有针对 hacktoberfest 2021 的问题或 PR.zip
- OpenCV的用户手册资源.zip
- 用springmvc实现的校园选课管理系统
- 我的所有 Python 代码都存储在这个文件夹中 .zip
- 以下是关于毕业设计项目开发的详细资源.docx