unix环境编程第七章 7.3进程终止

五种进程正常终止方式:

  1. 从main返回
  2. 调用exit,其操作包括调用各终止处理程序,然后关闭所有标准I/O流等。
  3. 调用_exit或者_Exit,在unix系统中这两个函数是同义的,并不冲洗I/O流,_exit函数为进程提供一种无需运行终止处理程序或信号程序而终止的方法。
  4. 最后一个线程从其启动例程中执行return返回
  5. 从最后一个线程调用pthread_exit

三种异常进程终止方式:

  1. 调用abort
  2. 接收到一个信号
  3. 最后一个线程对于取消请求做出响应

对于3个终止函数(exit,_exit,_Exit),实现这一点的方法是将其退出状态作为参数传递给函数。

在异常终止情况,内核产生一个指示其异常终止原因的终止状态。

1 退出函数

下面三个函数用于正常终止一个程序,_exit和_Exit立即进入内核,exit则先执行一些清理处理,然后返回内核。

#include <stdlib.h>
void exit(int status);//由于历史原因该函数会执行标准I/O库的清理关闭操作,对所有打开流调用fclose函数
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

上面三个函数的整形参数称为终止状态。

2.函数atexit

#include <stdlib.h>
int atexit(void (*func)(void));
//成功返回0,出错返回非0

example:

#include "apue.h"

static void my_exit1(void);
static void my_exit2(void);

int main()
{
  if(atexit(my_exit2)!=0)
         err_sys("cann't register my_exit2\n");
   if(atexit(my_exit1)!=0)
         err_sys("cann't register my_exit01\n");

   if(atexit(my_exit1)!=0)
         err_sys("cann't register my_exit01\n");
   printf("main is done\n");
   return 0;
}
static void my_exit1()
{
  printf("first exit handler\n");
}
static void my_exit2()
{
  printf("second exit handler\n");
}

执行结果:

 注意:atexit函数执行顺序和注册顺序相反

以上内容来源于网络,仅作本人学习笔记使用,关于本书请参APUE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值