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

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

猜你喜欢

转载自blog.csdn.net/qq_39309971/article/details/80216007