zoukankan      html  css  js  c++  java
  • 进程-(3)

    1.  进程退出的方式

    1) 正常退出
    在main函数中执行return
    调用exit函数,并不处理文件描述符,多进程
    调用_exit或_Exit.
    进程的最后一个线程执行了返回语句
    进程的最后一个线程调用pthread_exit函数

    2) 非正常退出
    调用abort,产生SIGABRT信号
    进程接收到某些信号
    最后一个线程对“取消”请求做出响应


    3) exit()和_Exit() _exit() 退出的区别:
    _Exit() _exit()本质是一样的。
    exit()函数在退出前允许调用其他的函数做一些收尾工作,_exit()函数要求立即退出进程。
    exit()退出前可以调用atexit()注册的函数。
    return 其实也会调用atexit()注册的函数。

    代码说明:

    例子1:exit() 函数查看退出
    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
      printf("begin ");
      exit(0);
      printf("end ");
      return 0;
    }

    [root@aiyq195 day07]# vi exit1.c
    [root@aiyq195 day07]# gcc exit1.c -o exit1
    [root@aiyq195 day07]# ./exit1
    begin

    上面结果说明了,调用了exit(),相当于在这一点就选择了return的作用,退出了程序。

    例子2:exit()函数,调用atexit() 函数的效果
    #include<stdio.h>
    #include<stdlib.h>
    void at()
    {
      printf("at is called ");
    }
    int main()
    {
      atexit(at);//注册了退出前调用的函数
      printf("begin ");
      exit(0);
      printf("end ");
      return 0;
    }


    [root@aiyq195 day07]# vi exit2.c
    [root@aiyq195 day07]# gcc exit2.c -o exit2
    [root@aiyq195 day07]# ./exit2
    begin
    at is called

    上面的结果说明:
    执行exit() 函数,程序退出时,可以调用一个函数-atexit()函数,在退出时,调用该函数内的数据;


    例子3:_exit() 函数,强制退出
    #include <stdio.h>
    #include <stdlib.h>

    void at()

    {
      printf("at is called ");
    }
    int main()

    {
      atexit(at);//注册了退出前调用的函数at
      printf("begin ");
      _Exit(0);//立即退出,不调用at()
      printf("end ");
      return 0;//效果等同于exit()
    }
    [root@aiyq195 day07]# gcc exit.c -o exit
    [root@aiyq195 day07]# ./exit
    begin
    结果表示:
    _exit() 函数,是强制退出,就算有atexit() 函数,也不会调用,相当于机器没有备用电源,直接断电;

    例子4: 如果没有用exit等函数,只有return,会如何
    #include <stdio.h>
    #include <stdlib.h>

    void at()

    {
      printf("at is called ");
    }
    int main()
    {
      atexit(at);//注册了退出前调用的函数at
      printf("begin ");
      printf("end ");
      return 0;//效果等同于exit()
    }

    [root@aiyq195 day07]# vi exit3.c
    [root@aiyq195 day07]# gcc exit3.c -o exit3
    [root@aiyq195 day07]# ./exit3
    begin
    end
    at is called

    结果说明:
    return函数,相当于exit,退出还是会调用atexit函数,也就是说,atexit函数,会在退出时,被吊起,但是,需要查看如何退出,如果是_exit() 函数退出,则不会被吊起;

  • 相关阅读:
    SpringMVC的文件上传
    关于SringMvc的参数的传递
    Myeclipse配置mybatis的xml自动提示
    SSM配置
    sql中truncate 、delete与drop区别
    局部变量和全局变量的调用
    java中 引用类型 和 基本类型 有何区别?
    mysql--select
    网站建设注意要点
    输入域名之后默认首页跳转到其他链接去
  • 原文地址:https://www.cnblogs.com/aiyq195/p/6427962.html
Copyright © 2011-2022 走看看