exec函数族

1. exec函数族介绍

fork()函数可以用来创建子进程,但是子进程执行的是和父进程相同的程序,或者说执行父进程程序的一部分,或者父进程与子进程执行不同的代码分支,但总归是跟父进程关系很大的程序。但我们创建子进程的目的往往是要让进程执行新的程序才行,这个时候就需要用到exec函数族。

当进程调用一种exec函数时,该进程用户空间的代码和数据会被新程序完全替代,然后从新程序的第一行代码开始执行,中间只要不出现错误就不会返回到原程序的代码,如果出现错误则返回到原程序中调用exec函数的下一行继续执行。

exec函数族并没有新建进程,因此进程的pid不变,它只是将原先进程的代码段数据段都替换成新进程的了

主要掌握excel和excelp即可

2. execl

函数原型如下

第一个参数path是要执行的新的程序(程序就是编译好的二进制代码)的路径

第二个参数arg是一个参数列表,即要执行的程序本身名字以及需要的实参

参数列表以NULL或者nullptr结尾,表示参数到此为止,后边没有了

如下边例子,第一个参数是ls这个命令(可执行程序)的路径,第二个参数是函数名,后边两个是参数

注意exec函数一旦执行成功就不会返回原函数,因为进程中原函数代码段已经被替换掉了,所以上方字符串“回来了吗”并没有输出

但是如果exec函数失败了的话,还是会继续执行原函数接下来的代码,此时没有进程替换,原函数代码还在

如下,此时找不到命令ls,因为当前程序所在目录中没有ls,于是“回到了吗”输出了

3. execlp

execlp与execl的区别就在于可以借助环境变量PATH来找到想要执行的可执行程序

即这里第一个参数ls可以不用指名路径 “/bin/ls”

4. fork与exec使用案例

打开一个bash,即有一个bash进程,如果我们要在这个bash里运行ls指令,则bash先调用fork创建也给子进程,然后这个子进程调用exec来执行ls

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值