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
------解决方案--------------------新的程序在子进程的地址空间中从main开始执行,已经不关父进程代码的事了.
------解决方案--------------------