5. 进程相关的函数

C 语言标准库中提供和一些进程相关的函数,比如 exitabort 用来结束当前进程,system 用来使用Shell 开启新的进程等。这些函数都在 stdlib.h 中声明。

头文件

stdlib.h

进程相关的函数

函数
说明
void exit(int status);
status 作为程序返回值正常退出进程。这是一个永不返回的函数。
void abort(void);
以异常方式退出进程。这是一个永不返回的函数。也不会调用 atexit注册的回调函数。
int atexit(void (*function)(void));
注册程序正常退出时的回调函数。
int system(const char *command);
调用 Shell 启动新命令,并等待命令执行完毕后返回,失败返回 -1,启动 Shell 失败返回 127,成功则返回命令的退出值。

示例:

// filename: mysystem.c
#include <stdio.h>
#include <stdlib.h>

void this_process_exit(void) {
    printf("进程即将退出!\n");
}

int main(int argc, char * argv[]) {
    int ret_value;

    // 注册程序退出时的回调函数
    atexit(this_process_exit);

    // 调用 Linux/UNIX 命令创建 文件夹 mydocs。
    ret_value = system("mkdir mydocs");
    printf("system函数调用的返回值是: %d\n", ret_value);

    exit(0);
    printf("程序在此之前退出,这一行不会打印。\n");

    return 0;
}

编译和运行结果如下:

weimingze@mzstudio:~$ ls
mysystem  mysystem.c
weimingze@mzstudio:~$ gcc -o mysystem mysystem.c
weimingze@mzstudio:~$ ./mysystem
system函数调用的返回值是: 0
进程即将退出!
weimingze@mzstudio:~$ ls
mysystem  mysystem.c  mydocs

从运行结果可以看出:

  1. system 函数创建文件夹 mydocs 成功了
  2. 调用 exit 函数后没有返回到主函数。
  3. this_process_exit 函数在程序退出前被调用了。

实验:

将上述程序中的 exit(0); 改为 abort();。重新编译并查看程序的运行结果,看有啥变化。