关于Linux下C语言编程execvp函数的一个问题

       在实现linux管道命令的shell程序的时候,在主函数里面创建了两个子进程,l都调用了execvp函数来执行命令,但是很奇怪的是,当命令可以执行的时候,程序正常执行,子进程也是每次都正常退出,但是如果命令无法识别,子进程就无法退出,所以每次出现这种情况,要调用exit命令(该exit命令是在父进程里面调用的,shell程序判断接收到的字符串为“exit”时即退出整个程序)退出整个程序的时候,总是要多输几次exit。后来才打印了exit时候的进程的pid,发现基本上是要输入三次exit才能退出,因为前两次是退出创建的两个子进程,最后一次才是退出父进程,但是按道理来说不管怎样,进程的代码执行完了就应该退出的,但是这个偏偏没有退出。
       后来才知道如果命令执行失败,即execvp函数执行失败的时候,子进程是无法正常退出的,需要用exit强制退出该子进程,所以这时候就需要加个判断,当execvp执行失败返回-1时,调用exit(0)来退出子进程,不然该进程还是在那里,导致后边的shell程序无法正常执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值