进程程序替换(自主实现shell)
进程替换
替换进程所运行的程序
流程:将另一段代码加载到内存中,通过页表将原来进程的映射关系重新建立到新的程序在内存中的地址,相当于替换了进程所运行程序以及所要处理的数据
(替换了代码段,重新初始化数据段)
目的:让程序执行其他任务
如何替换:exec函数家族
execl execlp execle execv execvp (这五个为库函数)
execve (这个为系统调用函数)
命名理解:
l(list) : 表示参数采用列表
v(vector) : 参数用数组
p(path) : 有p自动搜索环境变量PATH
e(env) : 表示自己维护环境变量
l 与 v的区别:
execl ( ls, -a, -i, NULL )——参数平铺赋予
execv ( )——用数组传输
有p 与没有 p 的区别:是否自动到 PATH 所指定的路径下查找程序文件
不带 p 需要自己给路径
execl (" bin/ls", "ls", "-1", NULL)
execlp ("ls", "ls", "-1", NULL)
有没有 e 的区别:是否自定义环境变量
env[0] = "MYENV = 1000" env[1] = NULL
execle (" /bin/ls", "ls", "-a", NULL, env)
main函数中的参数解析:
int main(init argc, char* argv[], char* env[])
argc:程序中有几个命令行参数
argv:用于储存这些参数
env:用于储存环境变量
自主实现一个简易的minishell:
代码实现:
最新文章
- Visual Studio 2010编译时总是提示";调用目标发生了异常";的解决
- oracle 密码过期处理
- HTTP基本认证
- CI框架分页类
- JavaScript学习记录总结(九)——移动添加效果
- 【转】使用Xcode和Instruments调试解决iOS内存泄露
- http://www.cnblogs.com/xia520pi/archive/2012/05/16/2504205.html
- linux make clean
- Android线控的使用
- Bzoj 3173: [Tjoi2013]最长上升子序列 平衡树,Treap,二分,树的序遍历
- 14.5.2.3 Consistent Nonlocking Reads 一致性非锁定读
- 基于visual Studio2013解决C语言竞赛题之0407最大值最小值
- 在Windows下开发Node.js的C/C++原生扩展
- ASP.NET MVC4.0+ WebAPI+EasyUI+KnockOutJS快速开发框架 通用权限管理系统
- win7 点IE浏览器无法打开
- 【转自知乎】:localhost、127.0.0.1 和 本机IP 三者的区别?
- 理解rem实现响应式布局原理及js动态计算rem
- scala开发环境安装
- Nginx unit 源码安装初体验
- phpdocumentor安装和使用总结
热门文章
- Android 之Activity启动模式(二)之 Intent的Flag属性
- aop 通知的执行顺序
- 动态连通性问题——算法union-find
- Java排序之计数排序
- Jmeter Web 性能测试入门 (七):Performance 测试中踩过 Jmeter 的坑
- SpringBoot保存数据报错:could not execute statement; SQL [n/a]; constraint [PRIMARY];nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
- Hive-概述
- Flutter移动电商实战 --(37)路由_Fluro引入和商品详细页建立
- OpenCV3.4.1快速集成到Android studio中,10分钟搞定
- SqlServer2008数据库的备份与还原