【发布时间】:2016-05-19 15:13:10
【问题描述】:
所以我知道exec* 函数之后的任何内容都不会被执行(当然,如果 exec* 调用成功的话)。
我想了解为什么会这样? 所以我开发了这个小小的程序
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("A program made to understand execvp\n");
char *cmd[4] = {"ls", "-l","file",NULL};
execvp(cmd[0],cmd);
printf("This will not be printed!!\n");
return 0;
}
我所理解的是,在 bin 目录中找到的可执行命令实际上是可执行程序,因此基本上从我们的程序中调用另一个程序时。
我确实在某个地方读到过
如果成功,exec 系统调用不会返回调用程序,因为调用图像丢失。
但这究竟意味着什么,为什么他们不返回调用程序?那他们怎么回来呢?
【问题讨论】:
-
引用:
The exec family of functions **REPLACES** the current process image with a new process image。换句话说,完全按照书面方式工作。 -
man exec 中的第一行解释了这一点:“exec() 系列函数用新的进程映像替换当前进程映像。”.
-
因为
exec系列函数替换您的代码与它加载的代码。 -
返回什么?调用
exec()的代码是GONE。它不再在内存中,所以没有什么可以返回的。 -
去年 10 月,stackoverflow.com/questions/32899582/… 是不是你问了同样的问题?
标签: c shell process exec execvp