无锡新区建设环保局网站,网站设计数据库怎么做,家里的电脑ip做网站,seo全网推广一、单进程下的程序替换 使用execl进行程序替换#xff0c;先执行execl前面的代码#xff0c;在execl处替换成其它进程的代码和数据继续执行#xff0c;后面的内容就不执行了#xff0c;因此只打印before
二、程序替换原理 前面我们fork创建子进程#xff0c;子进程会继承…一、单进程下的程序替换 使用execl进行程序替换先执行execl前面的代码在execl处替换成其它进程的代码和数据继续执行后面的内容就不执行了因此只打印before
二、程序替换原理 前面我们fork创建子进程子进程会继承父进程的代码和数据通过pid_t id进行分流。
而使用execl进行程序替换可以使子进程执行外部其它写好的程序。
执行到execl时直接将新的代码和数据替换到物理内存上然后调整页表映射关系这一过程中PCB不变还是原来的进程。 注父子进程继承时一般只有数据是写时拷贝代码为只读。
程序替换因为要修改只读的代码区OS内部就会进行写时拷贝这是为了保持进程独立性。
三、多进程版 创建一个子进程进行execl程序替换替换后子进程不变退出后被父进程wait回收
execl成功没有返回值失败有返回值代码和数据不被替换继续执行父进程根据退出码可以得到相应execl失败的信息。
四、exec系列函数接口的使用 注意几点规律
1、execl
第一个为路径(相对或绝对均可即找到这个可执行程序)
带l(list)为可变参数列表参数一个接一个传入。和命令行一样指令选项(找到后怎样做)
2、execlp(PATH)
会在默认的PATH环境变量中查找(可以省略一些路径)
注环境变量是全局的一直被继承替换时不改变环境变量 3、execv(vector)
参数类型为 字符串指针数组 将myargv这个命令行参数的数组传递给前面路径程序的int main(....)
传参在函数栈帧角度就是压栈出栈等一系列操作.....
4、execle(env)
可以传入自己的环境变量env
makefile伪目标(一次make生成多个可执行程序)
小问题
exec可以执行系统命令也可以执行自己写的可执行程序。 “ ”内就是可执行程序的名字找到路径直接执行。
exec可以跨语言调用 回到execle 命令行参数和环境变量也是数据在进程地址空间中存在只要不w就是全局的一直继承下去
execl中不传环境变量参数替换过来的函数也能拿到。