在fork()中,execl不会返回父级

时间:2013-08-30 19:36:04

标签: c unix fork argv

这是我的第一个档案:

int main(int argc, char *argv[]){

printf("\n\nJe suis dans le fils\n\n");

execl("/exec","ii",NULL);

printf("\n\nJe suis revenu dans le fils\n\n");
}

这是exec文件:

int main(int argc, char *argv[]){

printf("\n\n\n\nJe suis dans le exec\n\n\n\n");
printf("\n\n argc = %d \n\n argv[0] = %s \n\n argv[1] = %s",argc,argv[0],argv[1]);

}

问题:

我在exec文件中被阻止了,因此在我的printf之后的execl,在1s文件中,没有显示:/ 而且当我执行argv [0]的printf时,它应该显示文件路径,但在这里它显示我“ii”

1 个答案:

答案 0 :(得分:3)

  

我在exec文件中阻塞,所以我的execl之后的printf,在1s   文件,不显示

没错,execl不会返回(除非出现错误)。一旦你exec没有回头:实际上你的过程会变成另一个过程,执行一个不同的程序。

  

当我执行argv [0]的printf时,它应该显示我的文件   路径,但在这里它显示我“ii”

你认为argv[0]不应该被视为理所当然。父进程可以指定它想要的任何内容(甚至省略它)。在您的案例为子项argv[0]指定ii。如果要正确设置(无论可能是什么),请添加第二个"/exec"


附注:如果您想要一种简单的方法来执行某些操作,您可能需要查看标准的system(3)popen(3)函数。