问题1——在子进程中调用execl完后,接着调用_exit(0)的意义——< APUE-P201>

 整个程序是这样的:

if(pid == 0)

{

execl("/bin/sh", "sh", "-c", cmdtring, (char*0))

_exit(127);

}


首先,要搞清楚exec的执行是替换整个程序执行的。也就是将整个程序内容(包括数据、堆、栈空间,尤其是文本静态区),都会给替换掉的。

所以如果execl成功,那么后面的程序代码是不会再执行的。

所以_exit(127)是在execl调用不成功时执行的。

那么就来说说_exit(127)好了,首先返回值127的意思是,命令cmd不存在,当execl执行失败时,多为命令不存在或是权限的问题,所以当exec执行失败而接下去执行子进程时,子进程就告诉父进程失败原因,所以返回127。而_exit()和exit()最主要的区别就是前者不会将标准缓冲区进行冲洗就终止进程并向内核返回括号内的返回值。

在P201中说道,调用_exit而不调用exit的主要原因是为了防止任一标准缓冲区(这些缓冲区会在fork中由父进程复制到子进程)在子进程中被冲洗。可是据我所知,缓冲区复制意味着这是两个不同的缓冲区,且分别存在不同的进程(父、子进程)空间中,那么既然是在不同的进程空间中,那么fork之后的这两个缓冲区应该是没有关系、互相独立的才对啊(如果非要说有点什么关系的话,那顶多

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值