首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中的execl函数

Linux中的execl函数
EN

Stack Overflow用户
提问于 2017-02-16 03:22:57
回答 1查看 2.8K关注 0票数 1

我刚开始使用Linux内部概念。在下面的程序中,为什么没有执行第二个printf

代码语言:javascript
复制
#include <unistd.h>
#include <stdio.h>

int main(void) {
  printf("Before execl");
  execl("/bin/ls", "ls", "-l", NULL);
  printf("After execl");
  return 0;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 03:31:23

第二个printf没有执行,因为execl接管了应用程序的进程,并将其替换为新的指定进程。根据手册页:

exec()函数系列用新的进程映像替换当前进程映像。本手册中描述的函数是execve(2)的前端。(有关替换当前进程映像的详细信息,请参阅execve(2)手册页。)

execve(2)手册页面上:

execve()不返回成功,调用进程的文本、数据、bss和堆栈被加载的程序覆盖。如果正在跟踪当前程序,则在执行一个成功的execve()之后,将向它发送一个SIGTRAP。

如果您希望您的程序继续执行并显示第二个printf,则必须调用execl (或exec系列中的任何函数)在fork子程序中。C标准库函数system()就是这样做的,您可以查看源代码这里

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42264244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档