Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用exec后,子进程会发生什么变化?_C_Fork_Exec - Fatal编程技术网

调用exec后,子进程会发生什么变化?

调用exec后,子进程会发生什么变化?,c,fork,exec,C,Fork,Exec,我是系统编程新手,对exec函数的工作原理很好奇。我的第一个问题是为什么孩子在打电话给exec后从不打印“我就是孩子”。exec如何替换子进程?我的第二个问题是,为什么程序(在调用exec之后)会继续并在完全终止之前再请求一个命令行参数。我不知道这里发生了什么。任何人都能解释发生了什么,我们将不胜感激。代码如下: #include <stdio.h> #include <unistd.h> int main(void) { if(fork() == 0){

我是系统编程新手,对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;
}
#包括
#包括
内部主(空){
如果(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不用于运行命令然后返回,它将替换调用进程。执行后没有任何事情发生。第一部分已经回答,第二部分是。。。什么?你能将正在运行的会话复制粘贴到问题中吗?他们要求对所包含的代码进行评论,而不是与此人的链接。可能他们已经读过了。