首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C-检索大于8位的子级退出状态

C-检索大于8位的子级退出状态
EN

Stack Overflow用户
提问于 2015-10-22 18:40:44
回答 1查看 21.9K关注 0票数 0

注意:为了简单起见,我没有包含太多的错误检查,而且我的示例代码实际上没有任何实际用途。

我想要的:

我想要一个fork()是子进程并让它使用execl()调用进程的程序。然后,我的父程序检索该进程的退出代码。这是相当微不足道的。

我尝试了什么:

代码语言:javascript
运行
复制
int main(int argc, char** argv) {
    int ch = fork();
    if(ch == -1) {
        perror(NULL);
    }else if(ch == 0) {
        // In child, invoke process
        execl("/path/process", "process", 0);
    }else {
        // In parent, retrieve child exit code
        int status = 0;
        wait(&status);
        // print exit status
        if(WIFEXITED(status)) printf("%d\n", WEXITSTATUS(status));
    }
}

我的问题:

WEXITSTATUS()只检索退出值的较低的8位,而我需要int值中的所有位。具体来说,process执行计算,结果可能大于8位。它甚至可能是负的,在这种情况下,将需要最高位来表示正确的值。

我还尝试过什么:

另外,在环顾四周时,我发现了pipe()函数。但是,我不知道如何在这种情况下使用它,因为在调用execl()之后,我无法从子文件描述符中写入文件描述符。

那么,如何检索大于8位的子级退出状态呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-22 19:26:40

我不认为您想要完成的任务是可能的,因为在Linux (实际上我认为它是特定于UX的)中,进程退出代码是一个8位数(最多256):0-255 (按照惯例,0意味着成功,任何其他东西都意味着错误),而且很多东西都依赖于这个事实(包括您使用的宏)。取以下代码:

代码语言:javascript
运行
复制
// a.c
int main() {
    return 257;
}

如果您编译它(gcc a.c),并运行结果可执行(a.out)检查(echo $?)它的退出代码(将被操作系统截断;嗯,还是它是外壳?)它将输出1 (环绕算术):257 % 256 =1。

可以使用pipe (this post是相当描述性的)或套接字(AF_UNIX类型)。

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

https://stackoverflow.com/questions/33288356

复制
相关文章

相似问题

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