gpt4 book ai didi

c - 为什么 exec() 函数族不执行 exec() 之后的代码?

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:59 28 4
gpt4 key购买 nike

手册页说“exec() 系列函数用新的过程镜像替换当前的过程镜像。”但我不太明白“用新过程图像替换当前过程图像”的含义。比如exec成功,perror就达不到

execl("/bin/ls", /* Remaining items sent to ls*/ "/bin/ls", ".", (char *) NULL);
perror("exec failed");

最佳答案

正确。如果 exec 有效,则不会调用 perror,因为对 perror 的调用不再存在。

我发现在向新手介绍这些概念时,有时更容易将 UNIX 执行模型视为由进程、 程序程序实例组成。

程序是可执行文件,例如 /bin/ls/sbin/fdisk(请注意,这不包括 bash或 Python 脚本,因为在那种情况下,实际的可执行文件将是 bashpython 解释器,而不是脚本)。

程序实例是已经加载到内存中并且基本处于运行状态的程序。虽然只有一个程序,如 /bin/ls,但在任何给定时间可能有多个它的实例在运行,例如,如果你和我同时运行它。

“加载到内存中”短语是进程出现的地方。进程只是程序实例可以在其中运行的“容器”。

因此,当您fork 一个进程时,您最终会得到两个不同 进程,但它们仍然分别运行相同 的不同实例> 程序。 fork 调用通常被称为一个进程调用但两个进程返回的调用。

同样,exec 不会对进程本身产生影响,但它丢弃该进程中的当前程序实例并启动所请求程序的新实例。

成功的 exec 调用中的这种丢弃决定了它后面的代码(在本例中为 perror)将不会被调用。

关于c - 为什么 exec() 函数族不执行 exec() 之后的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com