MST

星途 面试题库

面试题:C语言在Linux下进程退出返回值的常规意义及应用

在Linux环境中使用C语言编程,当进程通过`exit`函数退出时,返回值0、1、-1分别代表什么常见意义?请举例说明如何根据不同的返回值在父进程中做相应处理。
47.8万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
  1. 返回值含义
    • 返回值0:通常表示进程成功完成任务并正常退出。例如,一个简单的文件读取程序,成功读取并处理完文件后,使用exit(0)退出,表明整个操作顺利。
    • 返回值1:一般用于表示进程遇到了一般性错误而退出。比如,程序在打开文件时,若文件不存在,可使用exit(1)退出,指示文件操作相关错误。
    • 返回值 - 1:在标准C语言中,exit函数本身并不会使用-1作为返回值,不过在一些自定义场景下,-1可以表示严重错误或异常情况,例如内存分配失败等严重问题导致程序无法继续运行。
  2. 父进程根据返回值做相应处理示例
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main() {
    pid_t pid = fork();
    if (pid == -1) {
        perror("fork");
        return 1;
    } else if (pid == 0) {
        // 子进程
        // 这里模拟不同的返回值情况
        // 例如模拟成功退出
        // exit(0);
        // 模拟一般性错误退出
        // exit(1);
        // 模拟自定义严重错误退出
        exit(-1);
    } else {
        // 父进程
        int status;
        waitpid(pid, &status, 0);
        if (WIFEXITED(status)) {
            int exit_status = WEXITSTATUS(status);
            if (exit_status == 0) {
                printf("子进程成功完成任务并退出\n");
            } else if (exit_status == 1) {
                printf("子进程遇到一般性错误退出\n");
            } else if (exit_status == -1) {
                printf("子进程遇到严重错误退出\n");
            }
        }
    }
    return 0;
}

在上述代码中,父进程通过waitpid等待子进程结束,并通过WIFEXITEDWEXITSTATUS宏获取子进程的退出状态,然后根据不同的返回值进行相应的处理。