执行function。 有没有办法回到主程序?

在ubuntu下exec()函数有问题。 有没有可能回到主程序?

例:

printf("Some instructions at beginning\n"); execlp("ls","ls", "-l", NULL); // i want to continue this program after exec and see the text below printf("Other instructions\n"); 

不可以。一个成功的exec调用用另一个程序代替当前的程序。 如果你想要父母和孩子都呆在一起,你需要在exec之前调用fork(2)

 pid_t childpid = fork(); if(childpid < 0) { // Handle error } else if(childpid == 0) { // We are the child exec(...); } else { // We are the parent: interact with the child, wait for it, etc. } 

请注意,失败的exec调用(例如给定的可执行文件不存在)确实会返回。 如果exec返回,总是因为错误,所以要准备好处理错误。

不,使用exec系列函数不可能的,因为从前面的代码生成的可执行文件,即包含execlp(“ls”,“ls”,“ – l”,NULL)函数的代码被替换为可执行文件将由execlp()函数运行,即ls 。 所以当这个函数成功执行的时候,你不再有那个包含execlp()函数的旧的可执行文件。

使用系统(“ls -l”); 函数,如果你想运行任何其他进程,并希望返回到当前进程。

exec系列函数新的过程映像替换当前进程。 如果你不想这样做,你需要在调用exec之前进行fork ,这样你的进程的新分叉副本被替换(而不是原来的替换)。

exec替换可执行文件映像。 没有回头路 一个不错的选择是vfork() execvfork复制进程,继续复制,并在完成执行时继续主进程。 副本可以exec所需的文件。 例:

 printf("Some instructions at beginning\n"); if(!vfork()){ // child execlp("ls","ls", "-l", NULL); // child is replaced } // parent continues after child is gone printf("Other instructions\n"); 

exec用一个新的过程映像替换当前的过程映像,所以, ,这是不可能的。

如果你想回到以前的工作,你可以做一个分支,并从子进程调用一个exec。

 if (fork() == 0){ //this part will only be executed by the child process execlp("ls","ls", "-l", NULL); wait((int*)0); } 

实际上, exec()或者它的函数族取代了当前的进程并执行

因此,在子进程中尝试fork并使用exec() ,然后在父进程中等待,直到子进程终止。

喜欢这个 :

 if(!fork()) { // In child execlp("ls","ls","-l",NULL); } wait(NULL); // In parent //rest of code