我刚开始使用Linux内部概念。在下面的程序中,为什么没有执行第二个printf ?
#include <unistd.h>
#include <stdio.h>
int main(void) {
printf("Before execl");
execl("/bin/ls", "ls", "-l", NULL);
printf("After execl");
return 0;
}发布于 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()就是这样做的,您可以查看源代码这里。
https://stackoverflow.com/questions/42264244
复制相似问题