我是系统编程的新手,很好奇exec函数的工作方式。我的第一个问题是,为什么孩子在打电话给exec之后从不打印“我是孩子”。 exec如何替换子进程?我的第二个问题是,为什么程序(在调用exec之后)继续运行,并在完全终止之前要求另外一个命令行参数。我不确定这是怎么回事。任何人都可以解释发生了什么将不胜感激。这是代码:
#include <stdio.h>
#include <unistd.h>
int main(void) {
if(fork() == 0){
printf("Hello from child!\n");
execl("/usr/bin/sort", "sort", "talk.c",NULL);
printf("I'm the child\n");
}
else{
printf("Hello from parent!\n");
printf("Iam the parent\n");
}
return 0;
}
答案 0 :(得分:2)
您可以在https://linux.die.net/man/3/execl中阅读有关execl
的信息
exec()系列函数将当前过程映像替换为新的过程映像。本手册页中描述的功能是execve(2)的前端。 (有关替换当前过程映像的更多详细信息,请参见execve(2)的手册页。)
exec
系列用新的过程映像替换当前过程映像,因此execl
之后什么也没有发生。