【问题标题】:What happens to the child process after calling exec?调用exec后子进程会发生什么?
【发布时间】:2019-04-24 10:43:11
【问题描述】:

我是系统编程新手,很好奇 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;
}

【问题讨论】:

  • exec 不是用来运行命令然后返回的,它代替了调用进程。 execl 之后什么都没有发生。
  • 第一部分已经回答,第二部分是……什么?你能把正在运行的会话复制粘贴到问题中吗

标签: c fork exec


【解决方案1】:

您可以在https://linux.die.net/man/3/execl 中阅读有关execl 的信息

exec() 系列函数用新的进程映像替换当前进程映像。本手册页中描述的函数是 execve(2) 的前端。 (有关替换当前进程映像的更多详细信息,请参见 execve(2) 的手册页。)

exec family 用新的过程映像替换当前的过程映像,因此execl 之后不会发生任何事情。

【讨论】:

  • 他们要求对包含的代码发表评论 - 而不是该人的链接。可能他们已经读过了。
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 2013-06-18
  • 2012-09-18
相关资源
最近更新 更多