From: http://hi.baidu.com/homappy/item/549b37c06865877488ad9e75

若父进程在子进程之前终止了,则子进程的父进程将变为init进程,其PID为1;保证每个进程都有父进程。

Linux学习之"exit函数"

先看下"_exit"和"exit":

exit被调用时,将冲刷所有的标准I/O流,关闭所有打开的文件描述符。在传统实现中,同时也将关闭标准I/O流。即表示标准输出FILE对象的相关存储区将被清0。而_exit不会执行这些操作。
由于父子进程共享同一地址空间,当父进程恢复运行并调用printf时,不会产生任何输出,它返回-1。这就是上一节调用_exit的原因。

然而,大多数exit的现代实现不再关闭流。因为进程即将终止,内核将关闭所有已打开的文件描述符。
Linux程序的终止分为"正常终止"和"异常终止",具体可能情况如下:
正常终止

从main返回

调用exit:ISO C定义

调用_exit或_Exit:前者由ISO C定义,后者由POSIX.1定义

最后一个线程从其启动例程返回

最后一个线程调用pthread_exit

异常终止

调用abort:产生SIGABRT信号

接到某些信号

最后一个线程对取消请求做出响应

几个要点:

1.不管进程如何终止,最后都会执行内核中的同一段代码:为相应进程关闭所有打开描述符,释放内存等等。

2.若父进程在子进程之前终止了,则子进程的父进程将变为init进程,其PID为1保证每个进程都有父进程。
3.当子进程先终止,父进程如何知道子进程的终止状态?事实上,内核为每个终止子进程保存了终止状态等信息,父进程调用wait等函数,就可获取该信息。
4.当父进程调用wait等函数后内核将释放终止进程所使用的所有内存,关闭其打开的所有文件。
5.对于已经终止、但是其父进程尚未对其调用wait等函数的进程,被称为僵尸进程(即已经结束,但尚未释放资源的)。
6.对于父进程先终止,而被init领养的进程会是僵尸进程吗?init对每个终止的子进程,都会调用wait函数,获取其终止状态信息。
综上所述,子进程调用exit后,父进程必须调用wait。

Linux学习之exit函数相关推荐

  1. linux C语言 exit()函数

    文章目录 man 2 exit 发现搞错了,应该看 man 3 exit 解释一下关于上面文档中提到的exit()函数的线程不安全性(thread safety: MT-unsafe race) ma ...

  2. linux c语言 exit函数,C语言中exit();怎么用?

    exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束. return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了,如果不是,那就是退回上一层 ...

  3. Linux学习笔记——系统函数IO

    文章目录 标准C库IO函数工作流程 标准C库函数与Linux系统函数之间的关系 虚拟地址空间 系统函数IO open read 与 write lseek 标准C库IO函数工作流程 用 fopen 打 ...

  4. linux下perror函数,Linux学习 之 perror函数,strerror函数,errno

    #include // void perror(const char *msg); #include // char *strerror(int errnum); #include //errno e ...

  5. Linux学习:文件属性函数

    1.stat 命令 stat filename ,功能上类似于 ls - l. 2.stat 函数 (1)头文件: #include <sys/types.h>#include <s ...

  6. C语言再学习 -- 关键字return和exit ()函数

    终于到了最后一个关键字 return 了.感觉时间过的飞快,转眼间又是一年,如果时间可以 return 就好了. 一.return 介绍 参看:C语言中return 用法 1.含义: return 表 ...

  7. 【Linux学习笔记④】——Shell程序设计【变量 输入与输出 条件表达式 判断语句 循环语句 Shell函数】

    ⌛️ 文章目录 一.Shell 概述 二.Shell 脚本的定义与执行 2.1 Shell 脚本的定义 2.2 Shell 脚本的执行 三.Shell 变量 3.1 用户自定义变量 3.2 环境变量 ...

  8. linux中进程退出函数:exit()和_exit()的区别

    linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...

  9. linux系统调用:exit()与_exit()函数详解【转】

    (转自:https://blog.csdn.net/drdairen/article/details/51896141) exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示 ...

最新文章

  1. 前端学习记录 JS DOM
  2. 2017-08-10 前端日报
  3. Maven_在Eclipse中执行Maven命令
  4. AD域控exchange邮箱(三)——exchange2010卸载报错的解决方法全纪录
  5. python模块datetime_Python模块学习 datetime介绍
  6. WIN7 X64 如何删除计算机管理里面一些无效的服务
  7. js判断时间是早上还是下午_测血糖别在下午,测空腹血糖早上几点最准确?
  8. QT中调用shell或外部命令
  9. 前端最佳实践(一)——DOM操作
  10. msp430的常量可以这样定义
  11. 别忘了我的世界有你存在
  12. android随机抽奖代码_Android自己定义效果——随机抽奖
  13. 评职称自费出书多少钱
  14. ai杀手级_设计师的10个杀手级Adobe Photoshop技巧
  15. 虚拟服务器密码遗忘怎么办,win7虚拟机忘记密码怎么办_win7虚拟机忘记密码的解决方法...
  16. python 91图片站爬虫
  17. java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...
  18. 01-查看Navicat加密的数据库密码
  19. AngularJS 教程
  20. 世间安得双全法,不负如来不负卿。

热门文章

  1. 从源代码角度看Struts2返回JSON数据的原理
  2. 使用AIR运行另外的程序。
  3. 熊猫数据集_熊猫迈向数据科学的第一步
  4. leetcode 1473. 粉刷房子 III(dp)
  5. leetcode面试题 10.05. 稀疏数组搜索(二分法)
  6. react 生命挂钩_如何在GraphQL API中使用React挂钩来管理状态
  7. 快应用比赛_我的应用如何在国际学生比赛中获得第三名
  8. Restful API 设计
  9. 20175223 MySQL
  10. [App Store Connect帮助]八、维护您的 App(4.2)查看评分与评论