在前两章中我们了解了创建进程,这一章我们来了解下,在linux下怎么结束进程。

在linux中,有3种正常结束进程的方法和2种异常终止的方法:

1、 正常结束:

a、 在main函数中调用return。这个相当于调用exit。

b、 调用exit函数,按这个函数在ANSI C中的定义,调用时将执行所有注册过的exit句柄,关闭所有的标准I/O流,但是并不处理文件描述符、多进程(父进程与子进程)、作业等,因而对linux系统而言并不完善。

c、 调用_exit函数。exit被_exit调用,关闭一些linux特有的退出句柄。

2、异常终止

a、 调用abort。这个其实是第二种情形的特例,因为它产生一个SIGABRT信号。

b、 进程收到特定信号,这个信号可以是进程自己产生的(如abort函数),也可以来自其他进程或内核。例如:进程企图访问越界的内存地址或者除数为零时,内核都会产生信号中断进程。

不管用何种方式结束进程,最终都要执行内核的同一段代码。这段代码关闭该进程打开的所有文件描述符,私访占用的内存等。

接下来我们来了解下exit和_exit函数

这两个函数在不同的头文件中:exit在stdlib.h中,_exit在unistd.h中

他们的具体调用形式如下:

void exit (int __status)

void _exit (int __status)

参数status为退出的状态。

我们来看一下下面这两段代码:

图1

图2

图3

图4

图1的代码缺少了导致了没有打印出测试结束的语句,这是因为printf 如果不加 , 则信息是不会立刻打印出来的,而 _exit 不会强制输出缓冲区中的数据,即通过printf/fprintf 这类调用产生的尚未写入设备仍在缓冲中的数据都会丢弃, _exit 时打印信息会丢失,而 exit 不会。 如果有 ,则直接打印出来,此时 exit/_exit 无区别

父子进程终止的先后顺序不同会产生不同的结果

1.父进程先于子进程终止:

此种情况就是我们所说的孤儿进程。当父进程先退出时,系统会让init进程接管子进程 。

2.子进程先于父进程终止,而父进程又没有调用wait函数

此种情况子进程进入僵死状态,并且会一直保持下去直到系统重启。子进程处于僵死状态时,内核只保存进程的一些必要信息以备父进程所需。此时子进程始终占有着资源,同时也减少了系统可以创建的最大进程数。

什么是 僵死状态呢?

一个已经终止、但是其父进程尚未对其进行善后处理(获取终止子进程的有关信息,释放它仍占有的资源)的进程被称为僵死进程(zombie)。

3.子进程先于父进程终止,而父进程调用了wait函数

此时父进程会等待子进程结束。

linux wait函数头文件_第五十八章、linux中的3种正常结束进程的方式你都了解么...相关推荐

  1. linux wait函数头文件_手把手教Linux驱动9-等待队列waitq

    在上一篇<手把手教Linux驱动8-Linux IO模型>我们已经了解了阻塞.非阻塞.同步和异步等相关概念,本文主要讲解如何通过等待队列实现对进程的阻塞. 应用场景: 当进程要获取某些资源 ...

  2. 三个子系统_「正点原子Linux连载」第五十八章Linux INPUT子系统实验(一)

    1)实验平台:正点原子Linux开发板 2)摘自<正点原子I.MX6U嵌入式Linux驱动开发指南> 关注官方微信号公众号,获取更多资料:正点原子 第五十八章Linux INPUT子系统实 ...

  3. listlength函数头文件_酷町问答 - 我们编程时,通常要用到哪些头文件,包含什么函数...

    1.常用数学函数 头文件 #include  或者 #include 函数原型 功能 返回值 int abs(int x) 求整数x的绝对值 绝对值 double acos(double x) 计算a ...

  4. vs2017 linux工程设置头文件,使用Visual Studio 2017作为Linux C++开发工具

    Visual Studio 2017 VS2017亮点很多,包括模块化安装.启动速度加快(第一次启动加快50%以上).github插件.启动页完善.增强代码提示功能,等等,更多参考:https://w ...

  5. linux free函数头文件,Linux_Linux下malloc/free与new/delete的区别,由于malloc/free是库函数,不是 - phpStudy...

    Linux下malloc/free与new/delete的区别 由于malloc/free是库函数,不是运算符,他们不能执行构造函数和析构函数,只是负责分配内存. 1.malloc与free是C++/ ...

  6. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  7. linux pid t 头文件_关于pid_t的理解

    今天学习进程的时候碰到一个语句:pid_t pid = fork(); 这里的pid_t类似一个类型,就像int型一样,int型定义的变量都是整型的,pid_t定义的类型都是进程号类型.这个语句的意思 ...

  8. listlength函数头文件_数据结构头文件

    头文件一般由三部分内容组成: (1) 头文件开头处的版权和版本声明: (2) 预处理块: (3) 函数和类结构声明等. 例如: (以下将提取头文件 SeqList.h 部分内容进行说明, 紫色部分为头 ...

  9. linux下mkdir头文件_整理Linux下gcc编译中关于头文件与库文件搜索路径相关问题

    态库./libpos.so. /root/test/env/lib/libpos.so和/root/test/conf/lib/libpos.so.我们再用源程序 pos_lib.c(见程序5)来创建 ...

最新文章

  1. Blender三维建筑场景动画制作学习教程
  2. .net下WinDbg使用说明
  3. leetcode-521-Longest Uncommon Subsequence I
  4. Nosql数据一致性技术概要
  5. 行为模型实例 php,JS中事件模型的实例详解
  6. Boost:aligned alloc对齐分配的测试程序
  7. 机器人铁锈斑斑好吗_工业机器人系统运维员是什么职业?这个职业好吗?去哪里学?...
  8. scapy 安装及简单测试
  9. node --- 监听路由,读取json文件,向MongoDB中写入数据
  10. 百度小程序全套源码下载、免费分享,一键生成百度小程序
  11. lgb,xgb,gbdt,adb,RF区别与联系
  12. php iis 重启服务,重新启动IIS即可生效
  13. MimeType对照表
  14. 成都工业学院(成都无机校/电子机械高等专科学校)百年校庆之行记
  15. error: incompatible types when assigning to type ‘const struct wiphy_wowlan_support‘
  16. 数据结构之数据指标对比(Performance Measurement)
  17. uip的yeelink实现
  18. DS查找—二叉树平衡因子
  19. 30分钟搭建你的静态网站
  20. 静态LSP的建立过程(华为设备)

热门文章

  1. Apache RocketMQ 发布 v4.4.0,新添权限控制和消息轨迹特性
  2. 被外包程序员植入了后门程序,触发后删除数据库但他们死不承认,该怎么办?...
  3. 用C#编写一个进程外的COM组件示例代码讲解
  4. Java Web文件下载
  5. 移动开发痛点之一-接口验证之PostMan图文教程
  6. it'll be much more productive to read pdf files via a touch screen
  7. 撤销commit且未push操作的git命令
  8. Linux下的微秒级定时器: usleep, nanosleep, select, pselect
  9. Java字符串格式化记录
  10. 安卓第三天笔记--通知-进度条-时期