进程程序替换(自主实现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:
代码实现:





进程程序替换(自主实现shell)的更多相关文章
- Python编写守护进程程序
Python编写守护进程程序思路 1. fork子进程,父进程退出通常,我们执行服务端程序的时候都会通过终端连接到服务器,成功连接后会加载shell环境,终端和shell都是进程,shell进程是终端 ...
- 关于用python作为第三方程序,来调用shell命令的问题,以及返回值格式解析
1.用python语言作为第三方,调用shell 在python2.x中,可以通过包commands来进行调用shell命令.如下: cmd就是你要调用的shell命令,把环境配置好,输入正确的命令格 ...
- 如何替换Windows的Shell(即explorer.exe)
原文:如何替换Windows的Shell(即explorer.exe) 下载一个可以查看用户的SID的软件,如SysInternals套装中的PsGetsid.exe(地址:http://www.it ...
- cmd批处理bat命令根据端口号一键关闭杀死对应进程程序
@ 目录 cmd批处理bat命令根据端口号一键关闭杀死对应进程程序 使用场景和功能介绍 主界面 下载地址 源代码 cmd批处理bat命令根据端口号一键关闭杀死对应进程程序 使用场景和功能介绍 java ...
- Shell脚本运行hive语句 | hive以日期建立分区表 | linux schedule程序 | sed替换文件字符串 | shell推断hdfs文件文件夹是否存在
#!/bin/bash source /etc/profile; ################################################## # Author: ouyang ...
- Linux下查看进程(程序)启动时的环境变量
背景: 因最近试安装Linux下的jira,有一个中文插件安装后,一旦设置开机启动后,它是英文,而在终端再重新启动一次后呢,似乎插件生效,它又恢复为正常中文界面,我首先想这这涉及到一个环境变量的问题, ...
- ovirt 替换自主签署证书
需求我自己写了一个python后台,添加上了ovirt 引擎web上,如图 但第一次访问时需要,需要接受两次不安全连接,ovirt web使用https,我往里面加http,加不进去. 只能同样使用 ...
- 【转】Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs
http://www.cnblogs.com/carbon3/p/5930803.html 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监控网卡流量的.但是 ...
- Linux下进程/程序网络带宽占用情况查看工具 -- NetHogs
http://www.vpser.net/manage/nethogs.html 来自. 最后略有修改 之前VPS侦探曾经介绍过流量带宽相关的工具如:iftop.vnstat,这几个都是统计和监 ...
随机推荐
- An error occurred while starting a transaction on the provider connection. See the inner exception for details.
用EntityFramework循环操作数据时,报了如下错误 An error occurred while starting a transaction on the provider connec ...
- Kotlin 中类函数
在kotlin中函数可以在类外部定义也可以在类内部定义,前者即为全局函数,后者,是类成员函数,语法一样 package loaderman.demo class Person { fun demo(n ...
- 请求路径@PathVariable注释中有点.英文句号的问题(忽略英文句号后面的后缀)
前端页面请求地址 <video id=example-video width=960 height=540 class="video-js vjs-default-skin" ...
- Python实现的选择排序算法原理与用法实例分析
Python实现的选择排序算法原理与用法实例分析 这篇文章主要介绍了Python实现的选择排序算法,简单描述了选择排序的原理,并结合实例形式分析了Python实现与应用选择排序的具体操作技巧,需要的朋 ...
- python用户评论标签匹配的解决方法
python用户评论标签匹配的解决方法 这篇文章主要为大家详细介绍了python用户评论标签匹配的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 我们观察用户评论发现:属性词往往和情感词伴 ...
- ubuntu kylin 18.04 安装 Qt Creator 5.11
首先,去官网(https://download.qt.io/official_releases/qt/ )下载Qt Creator的安装包. 我下载的是5.11.1版本文件:qt-opensource ...
- 【ARTS】01_27_左耳听风-201900513~201900519
ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...
- WordPress自定义循环
我们在学WordPress的时候,最常用到的就是循环了.写模板的时候,多数的时间都是和循环打交道的.如果你不能很详细的了解WordPress的循环,是很难写出模板来的. 而WordPress自定义循环 ...
- HDU 1159 最长公共子序列
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- C语言tips_2 关于scanf 读取规则小结以及与getchar 的区别
第一点:scanf默认回车和空格是输入不同组之间的间隔和结束符号. 也就是说他不会读取 空格 和 换行符.而是把他们当作一个 数据被读取完成的标志!他的停止标志则为,当%d之类的数据输入结束之后,自动 ...