Linux学习之exit函数

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要设置环境变量,环境变量有什么用?

比如说你要执行 java 命令,你不设置环境变量path包括你的jdk安装路径,那系统去哪找你的java.exe文件。 如果执行某个命令,系统无法在当前文件夹里找到对应的.exe,那么系统就会去path包含的路径找挨个找看是否能知道对应的.exe&…

CM3计算板RTC闹钟唤醒系统

1、前言 一个周期性控制系统的核心为CM3计算板,在电池供电情况下要求尽可能提高使用时长。由于系统空闲时长较多,因此在考虑低功耗的情况下将系统关机以进一步降低功耗。需要注意的是,系统关机后需要在指定时间唤醒,继续执行相关…

[react] 在React中如果去除生产环境上的sourcemap?

[react] 在React中如果去除生产环境上的sourcemap? GENERATE_SOURCEMAPfalse react-scripts buildIf you use the Create-React-APP 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目…

[相关总结性文章] 写给即将入行的程序员的一封信

本文来自:安卓航班网 首先,欢迎来到程序员的世界。在这个世界上,不是有很多人想创造软件并解决问题。你是一名hacker,属于那些愿意做一些有挑战性的事情的人。  “当你不创造东西时,你只会根据自己的感觉而不是能力去…

火狐浏览器所有的快捷键

From: http://zhidao.baidu.com/question/218604936.html firefox快捷键搜索类:本页查找: CtrlF 再次查找: F3 输入查找链接: 输入查找文本: / 查找: ShiftF3 网页搜索: CtrlK 或 CtrlEfire…

超文本引用href的几种用法

href"要跳转目标链接"; href"#";当前页面不跳转(返回顶部) href"###";当前页面不跳转(同时不回到顶部) href"javascript:;";当前页面不跳转,返回空 href"javscript:void…

[react] React的触摸事件有哪几种?

[react] React的触摸事件有哪几种? onTouchCancel onTouchEnd onTouchMove onTouchStart 个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

arm-linux-gnueabihf gcc8.3交叉编译工具搭建教程

一、运行环境 1.1 执行机环境 ld GNU ld (GNU Binutils for Raspbian) 2.31.1 ldd ldd (Debian GLIBC 2.28-10rpi1) 2.28 Copyright (C) 2018 Free Software Foundation, Inc. gcc (Raspbian 8.3.0-6rpi1) 8.3.0 Copyright (C) 2018 Free Software Foundation, Inc.…

Md5 Md5实现原理

参考: http://wenku.baidu.com/view/ddb1008271fe910ef12df8df.html转载于:https://www.cnblogs.com/85538649/archive/2011/08/24/2152187.html

Linux tcpdump命令详解

From: http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html 简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包…

Win7 64bit系统下未能加载文件或程序集“System.Data.SQLite”的另一解决办法

在http://www.cnblogs.com/downcom/archive/2009/10/26/1590120.html中我曾给出一种解决方法,但这种方法在本地用64位系统开发程序,但服务器却是使用的32位的系统时却是很麻烦的,一直得改来改去的,今天使用另一种解决方法。 1、打…

整理一下网上看到的几个巧妙小电路

1、单按键开关机电路 思路:按下按键后,MCU输出开机信号PG1,关机则检测KEY1的电平,关键是二极管构成“或”的电路。 2、USB和电池供电切换电路 思路:USB有电则断开电池供电回路,用P-MOS管实现 3、快速放电…

[react] 状态管理器解决了什么问题?什么时候用状态管理器?

[react] 状态管理器解决了什么问题?什么时候用状态管理器? 专注 view 层 React 官网是这么简介的。JavaScript library for building user interfaces.专注 view 层 的特点决定了它不是一个全能框架,相比 angular 这种全能框架,R…

艾伟:ASP.NET跨页面传值技巧总结

关于页面传值的方法,引发了很多讨论。看来有很多人关注这个,我就我个人观点做了些总结,希望对大家有所帮助。 1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递…

BCC异或校验 Linux C

1、BCC异或校验 从输入的HEX第一个字节开始,按字节依次循环计算异或值直到HEX结尾字节,得到的最终一个字节值。 2、C程序 /******************************************************************************* _____ ___ ____ ___ _____ _ …

Linux tcpdump命令用法详解

From: http://os.51cto.com/art/201005/201921.htm TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员 进行网络分析而设计的。对于网络管理人员来说,使用…

[react] 在React中怎么引用sass或less?

[react] 在React中怎么引用sass或less&#xff1f; 安装 npm node-sass -D 导入&#xff1a; import app from ../app.module.scss 使用&#xff1a; <div className{app.tabbar}> 个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

Revit二次开发“创建组遍历组Group”

group 就是吧一些有关系的对象放在一个组里面 [Transaction(TransactionMode.Manual)][Regeneration(RegenerationOption.Manual)]//[Journaling(JournalingMode.NoCommandData)]publicclasscmdGroup : IExternalCommand{ publicResult Execute(ExternalCommandData cmdData…

hdu 3951 硬币围成一圈(博弈)

n个硬币围成一个环 每次只能取1-K个硬币 最后取完者胜 假如5个硬币 每次取1-2个情况1 先手取1个 后手取剩下4个中间2个 破坏了连续 虽然最后剩2个&#xff0c;但先手只能取一个 然后后再取一个 后手胜 情况2 先手取2个 后手取剩下3个中间的那1个 然后同理 后手胜 Sample Input2…

C 如何对指针进行指定字节的偏置操作

1、概念 指针进行偏置操作后&#xff0c;需要注意的是偏置指向为同类型的指针&#xff0c;不可简单认为指针的指向地址增加或减小响应的偏置量。 2、示例 int aVal 100; int *pVal; int offset 2; pVal &aValoffset;Q:假设aVal的地址为6684156&#xff1b;求pVal的值…