Linux——进程程序替换

本文介绍了在Unix/Linux系统中,如何使用fork创建子进程并利用exec系列函数(包括execl和execv)进行程序替换,强调了exec系列函数的执行机制、参数含义以及它们在进程替换中的作用。特别指出,exec系列函数调用成功时不返回值,仅在失败时返回-1。
摘要由CSDN通过智能技术生成

替换原理

用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数 以执行另一个程序。当进程调用一种exec函数时,该进程的用户空间代码和数据完全被新程序替换,从新程序的启动 例程开始执行。调用exec并不创建新进程,所以调用exec前后该进程的id并未改变。

如上图所示,我们使用exec系列函数后,会将物理内存的数据段和代码段进行替换,而我们的PCB(进程结构体)大致上是不会改变的。

exec系列函数

我们可以使用以下指令来查到exec系列函数的相关信息。

如上图所示,我们发现它有6种类型。其实我只要讲两种基本的,其它的就很好理解了。

我就细讲execl和execv两种。

execl

我们来看看它的参数,第一个参数的意思是你要写一个路径让它知道在哪里,第二个即后面的参数的意思就是你要替换的指令。(如图)

ls指令是在/usr/bin/ls下,后面就是我们想替换的指令,最后面的NULL的意思就是告诉它我们的指令输完了,可以停止读取了的意思。

我们可以来看看结果。

我们可以发现运行这个程序后出现的不是helloworld而是ls指令的结果,说明程序替换成功了。

execv

execv就是只要我们把分开写的指令写到一起就可以了。

如上图所示没有太大的区别。

那么其它的是什么意思呢?

那么有没有什么好的记法呢?其实是有的。

这些函数的返回值是什么意思呢?

注意:exec系列函数调用成功的时候是没有返回值的,只有调用失败的时候会返回-1.

所以如果我们想要进行程序替换的话,exec系列的函数可以帮助我们完成。

  • 20
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值