首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >execl - Ubuntu

execl - Ubuntu
EN

Stack Overflow用户
提问于 2014-09-01 02:12:24
回答 1查看 262关注 0票数 0

我的问题是:在完成新进程映像的执行之后,功能

主管()

是将执行返回给调用进程还是返回父进程?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-01 02:35:07

在使用exec系列函数时,并不期望该函数在所有上返回。程序计数器从取代调用进程的二进制图像的第一指令开始。

在达尔文手册页上:

如果任何exec()函数返回,就会发生错误。返回值为-1,全局变量errno将被设置为指示错误。

有人就以下问题发表评论,但已删除:

如果您处于子进程中,并且execl成功,那么子进程将被新的二进制文件替换。如果失败,控件将返回到该子进程(调用方)。如果你要求的是forkexec之间没有严格的关系。如果您处于子进程中,而exec失败,则有一个“分叉”子进程,它是原始父进程的副本。此时,您可能希望打印一些错误消息并退出子进程。

如果您想知道失败的原因,可以使用以下模式:

代码语言:javascript
复制
if (execl(...)) {
    perror(NULL);
    exit(errno);
}

例如,尝试运行此程序,错误消息将指示如何修复该程序:

代码语言:javascript
复制
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main (const int argc, char * const argv[]) {
    if (execl("ls", "ls", "-la", NULL)) {
        perror(NULL);
        exit(errno);
    }

    return 0;
}

解决方案,在本例中使用execlp而不是execl

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25598046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档