调用exec后,子进程会发生什么变化?
我是系统编程新手,对exec函数的工作原理很好奇。我的第一个问题是为什么孩子在打电话给exec后从不打印“我就是孩子”。exec如何替换子进程?我的第二个问题是,为什么程序(在调用exec之后)会继续并在完全终止之前再请求一个命令行参数。我不知道这里发生了什么。任何人都能解释发生了什么,我们将不胜感激。代码如下:调用exec后,子进程会发生什么变化?,c,fork,exec,C,Fork,Exec,我是系统编程新手,对exec函数的工作原理很好奇。我的第一个问题是为什么孩子在打电话给exec后从不打印“我就是孩子”。exec如何替换子进程?我的第二个问题是,为什么程序(在调用exec之后)会继续并在完全终止之前再请求一个命令行参数。我不知道这里发生了什么。任何人都能解释发生了什么,我们将不胜感激。代码如下: #include <stdio.h> #include <unistd.h> int main(void) { if(fork() == 0){
#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;
}
#包括
#包括
内部主(空){
如果(fork()==0){
printf(“来自孩子的你好!\n”);
execl(“/usr/bin/sort”、“sort”、“talk.c”、NULL);
printf(“我是孩子”\n);
}
否则{
printf(“来自家长的问候!\n”);
printf(“Iam是父级\n”);
}
返回0;
}
您可以在
exec()函数族用新的进程映像替换当前进程映像。本手册页面中描述的功能是Exeve(2)的前端。(有关替换当前进程映像的更多详细信息,请参阅Exeve(2)的手册页。)
exec
系列将当前进程映像替换为新的进程映像,因此exec
之后不会发生任何事情。exec不用于运行命令然后返回,它将替换调用进程。执行后没有任何事情发生。第一部分已经回答,第二部分是。。。什么?你能将正在运行的会话复制粘贴到问题中吗?他们要求对所包含的代码进行评论,而不是与此人的链接。可能他们已经读过了。