学习笔记(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[]);

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值