我是系统编程的新手,很好奇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 childn");
}
else{
printf("Hello from parent!n");
printf("Iam the parentn");
}
return 0;
}
您可以在 https://linux.die.net/man/3/execl 中阅读有关execl
的信息
exec(( 系列函数将当前进程映像替换为新的进程映像。本手册页中描述的函数是 execve(2( 的前端。(参见 execve(2( 的手册页 来获取有关替换当前进程映像的更多详细信息。
exec
族 将当前进程映像替换为新的进程映像,因此execl
之后不会发生任何操作。