• 学习笔记(linux高级编程)7


        2._exit    系统调用

        void _exit(int status);

        功能:

             让进程退出,不刷新缓存区

        参数:

             status:进程退出状态

        返回值:

             缺省

        回调函数

        3.atexit

        int atexit(void (*function)(void));

        功能:

             注册进程退出前执行的函数

        参数:

             function:函数指针

                 指向void返回值void参数的函数指针

        返回值:

             成功返回0

             失败返回非0

        当程序调用exit或者由main函数执行return时,所有用atexit


        注册的退出函数,将会由注册时顺序倒序被调用

    3.进程空间的回收

       

        exit(20);

       

    wait/waitpid

        pid_t wait(int *status);

    功能:该函数可以阻塞等待任意子进程退出

          并回收该进程的状态。

          一般用于父进程回收子进程状态。

    参数:status 进程退出时候的状态

          如果不关心其退出状态一般用NULL表示

          如果要回收进程退出状态,则用WEXITSTATUS回收。

    返回值:成功 回收的子进程pid

             失败 -1;

    WIFEXITED(status)  是不是正常结束

    WEXITSTATUS(status) 使用这个宏去拿子进程结束exit(20)中20这个返回值

    WIFSIGNALED(status) 是不是收到了信号而终止的

    WTERMSIG(status)如果是信号终止的,那么是几号信号。

    pid_t waitpid(pid_t pid, int *status, int options);

        < -1 回收指定进程组内的任意子进程

        -1 回收任意子进程,组内外

        0 回收和当前调用waitpid一个组的所有子进程,组内

        > 0 回收指定ID的子进程

         waitpid (-1,a,0)  == wait(a);

         status 子进程退出时候的状态,

                 如果不关注退出状态用NULL;

          options 选项:

                     0  表示回收过程会阻塞等待

                      WNOHANG 表示非阻塞模式回收资源。

        返回值:成功 返回接收资源的子进程pid

             失败  -1

             0,

            

             EAGAIN

    exec

    execute

    exec

    用fork创建子进程后执行的是和父进程相同的程序(但有可能执行不同的代码分支),

    子进程往往要调用一种exec函数以执行另一个程序。当进程调用一种exec函数时,该进程的

    用户空间代码和数据完全被新程序替换,从新程序的启动例程开始执行。调用exec并不创建

    新进程,所以调用exec前后该进程的id并未改变。

    其实有六种以exec开头的函数,统称exec函数:

    ls -l -i list

    execl("/bin/ls","-l","-i",NULL);

    int execl(const char *path, const char *arg, ...);

    execlp("ls","-l","-i",NULL);

    int execlp(const char *file, const char *arg, ...);

    int execv(const char *path, char *const argv[]);

    int execvp(const char *file, char *const argv[]);

  • 相关阅读:
    前端动画的另一种方式 json动画
    Java工具库Guava的不可变集合和新集合类型Multiset、Multimap、BiMap、RangeSet、RangeMap等的使用示例
    2023年USNews全美大学排名公布(附top300榜单)
    Vue中使用百度地图引发内存泄露的分析与解决方案
    什么是可制造性设计?如何保证电子产品可靠性设计?
    如何用等价类划分法设计测试用例, 来测试程序的日期检查功能?
    Flyway 入门教程
    C# 背景与前景
    PTA_乙级_1013
    Revit土建模块【图转轴网】功能快速生成轴网
  • 原文地址:https://blog.csdn.net/qq_62143038/article/details/140022046