进程的5种终止方式

预备知识:缓冲区的刷新方式

  • fflush(stdout)
  • \n能启动刷新缓冲区的作用

1.进程终止的5种方式

  1. 正常退出
    从main函数返回–语言级别的返回操作
    调用exit–C库函数
    调用_exit–系统调用
  2. 异常退出
    调用abort 产生SIGAORT信号
    由信号终止 ctrl+c /SIGINT

2.exit和_exit的区别
在这里插入图片描述

  1. 退出时,缓冲区是否会刷新
    exit在退出进程之前会先刷新缓冲区
    _exit不会自动清空缓冲区,必须[手动调用fflush , 加上\n]才能刷新
int main(void){
    printf("hello itcast");
    //exit(0);//不需要程序员手工刷新缓冲区
    fflush(stdout);//不加这句话--不会刷新缓冲区--不会打印
    _exit(0);
}
  1. exit会调用注册的终止处理程序
    [1]atexit可以注册终止处理程序,ANSI C规定最多可以注册32个终止处理程序。
    [2]终止处理程序的调用与注册次序相反
int atexit(void (*function)(void));  //man 2 atexit
示例代码:
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <signal.h>
#include <errno.h>
#include <signal.h>

void bye1(void){
    printf("bye1...do\n");
}
void bye2(void){
    printf("bye2...do\n");
}
int main(){
    atexit(bye1);
    atexit(bye2);
    printf("hello....  fddddddddd1111");
    fflush(stdout);

    //exit(0)是c库函数 =======其他操作。。。。在调用_exit
    _exit(0); //系统调用--不会调用终止处理程序
}
int main02(){
    atexit(bye1);
    atexit(bye2);
    printf("hello....  fddddddddd1111\n");
    //abort();

    //exit(0); //是c库函数 =======调用终止处理程序。在调用_exit
    return 0;//main函数结束时也会隐式地调用exit函数
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值