读书人

unix中exec函数解决办法

发布时间: 2012-09-27 11:11:17 作者: rapoo

unix中exec函数
int pid=0;
if(pid=fork()<0)
status=-1;
else if(pid==0) /* child */
{
execl("/bin/sh","sh","-c","date",(char *)0);
printf("can't go here\n");
_exit(127);
}
else {
while(waitpid(pid,&status,0)<0)
{
/*deal error*/
}
}
我想问的是为什么到不了printf("can't go here\n"); execl函数 执行后 是直接结束进程吗? 只有出错的之后 才执行printf("can't go here\n");吗???


[解决办法]
执行execl后,子进程(也就是else if(pid==0)的处理)
就被execl要执行的处理覆盖了,所以后面的代码就执行不到了吧。

出错的话不就异常了吗,也执行不到printf("can't go here\n");
[解决办法]
没错,execl 失败_exit(127), 这个是一个习惯约定。system 函数就是这样的。
http://www.freebsd.org/cgi/man.cgi?query=system&apropos=0&sektion=0&manpath=FreeBSD+9.0-RELEASE&arch=default&format=html

探讨
哦 这样呀
我还有一点不明白,就是这段代码_exit(127);还有什么用吗?
是不是就是execl执行异常的时候 就执行_exit(127),返回给父进程退出状态码127??
我这么理解对吗?

[解决办法]
新的程序在子进程的地址空间中从main开始执行,已经不关父进程代码的事了.
[解决办法]
探讨

执行execl后,子进程(也就是else if(pid==0)的处理)
就被execl要执行的处理覆盖了,所以后面的代码就执行不到了吧。

出错的话不就异常了吗,也执行不到printf("can't go here\n");

读书人网 >UNIXLINUX

热点推荐