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

进程控制II

目录

进程程序替换

exec系列函数

minishell实现

小知识


进程程序替换

一个进程要执行一个不同的程序,例如子进程调用exec函数。

 原理:进程程序替换是通过特定的接口,加载磁盘上的一个全新的程序(代码和数据),加载到调用进程的地址空间中,替换原代码和数据。

注:

1.程序替换中,未创建新进程

2.替换之后原程序代码不会再执行

3.程序替换失败会返回-1,成功无返回值

4.在子进程中进行程序替换,不会影响父进程,会在内存地址空间中新开代码和数据的存储区,然后让子进程的页表重新映射。

exec系列函数

l(list):表示参数采用列表(可变参数)

v(vector):参数用数组

p(path):表示自动搜索环境变量

e(env):表示需要传环境变量表

path:要执行的程序的路径

arg:传递给新程序的参数,一般为要执行的程序名

...:给程序传递的命令行选项(可变参数)

file:要执行的程序名称

注:1.在...后要加NULL,在argv结尾要有NULL。

对于环境变量,如果即想设置自定义的,又想用系统默认的,就通过putenv函数向系统默认的环境变量表中添加,然后在调用exece系列函数时,直接传environ即可。

还有一个系统调用,上面的6个全都是对这个的封装

minishell实现

分5步走

1.输出命令提示符

2.获取用户输入的命令

3.把用户输出的命令行字符串解析成命令行参数

4.exec系列函数执行命令/内建命令

main.cpp文件

myshell.h文件

myshell.cpp文件

 

 

 

小知识

1.命令行中的命令比如ls等也是bash创建子进程然后进行程序替换执行的。

2.二进制文件,必须先从磁盘加载到内存中,因为冯诺依曼体系规定,CPU不能直接访问外设,只能访问内存。

3.环境变量在进程的地址空间中,如果不以参数形式传给子进程,子进程也是可以使用的,因为子进程继承了父进程的虚拟地址空间,程序替换只会替换代码和数据,更改页表映射,其余不会变。

http://www.xdnf.cn/news/804.html

相关文章:

  • 用P0口控制LED(STC89C52单片机)
  • 对于校园网如何进行用户识别——captive portal的原理学习总结
  • 10 C 语言常量详解:#define 与 const 定义常量及其区别与应用
  • 延长(暂停)Windows更新
  • 【C++详解】C++入门(一)命名空间、缺省参数、函数重载
  • 【牛客练习赛137 C】题解
  • AI与思维模型【71】——断裂点理论
  • 3.4/Q2,GBD数据库最新文章解读
  • Redis下载
  • 端口被占用的综合解决方案
  • NHANES指标推荐:RFM
  • C++类成员函数 重写、覆盖与隐藏
  • 本地离线安装Ollama
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.24)
  • 数据库知识
  • MySQL -数据类型
  • ZYNQ笔记(十):XADC (PS XDAC 接口)
  • 【项目实训个人博客】数据集搜集
  • 成品检验工程师心得总结
  • 基于ESP32 - S3实现一个ping百度的C测试程序
  • linux 搭建 dvwa 渗透测试环境
  • 6.数据手册解读—运算放大器(三)
  • AI日报 - 2025年04月20日
  • LangChain 单智能体模式示例【纯代码】
  • Spring Boot 集成 Spring Cloud 的详细教程
  • 学习笔记—C++—string(练习题)
  • 基于 LWE 的格密码python实战
  • STM32 HAL库Freertos 信号量的使用
  • c++类与对象(一)
  • Postgresql几个常用的json操作