Linux下进程子进程的退出情况

  进程的退出分为了两大类,一类是正常的退出,另一类是非正常的退出。

正常退出时有五种情况,分别是

①main函数调用return

②进程调用exit(),标准c库

③进程调用_exit()或者_Exit(),属于系统调用

④进程最后一个线程返回

⑤最后一个线程调用pthread_exit

非正常退出时有3种情况,分别是

①使用abort终止

②进程收到某些信号的时候,如使用ctrl+c终止

③最后一个线程对取消(cancellation)请求做出响应

这里我们主要来用exit函数来讲解子进程正常退出

一、验证子进程正常退出,父进程有无调用wait函数的区别

1.父进程无调用wait函数,程序如下

运行结果如下,我们可以看到子进程的ID号是2298,父进程的ID是2297。我们使用

ps -aux|grep a.out命令后可以发现父进程正在运行,状态是S+;子进程的状态是S+,代表僵尸进程。所谓僵尸进程就是说“死而不僵”,看似结束了,但是还存在,就是不工作。同时大家应该还可以看到2394的存在,这是因为使用了ps -aux|grep a.out命令产生了新的进程

2. 父进程调用wait函数,程序如下

运行结果如下,可以看到子进程运行结束后已经彻底消失,不存在僵尸进程。

二、验证子进程正常退出,wait函数功能的验证

wait函数具有阻塞功能,可以然子进程先运行完,父进程才可以运行。wait函数还可以存放子进程退出状态(就是子进程在调用exit函数时,exit的参数)。我们知道,fork函数创建的进程子进程和父进程的运行时没有规律的,两个进程是“抢着”运行,父进程是不会等待子进程的。下面我们就利用fork函数验证的wait函数的阻塞功能。代码如下

运行结果如下,我们可以看到父进程是等到子进程结束之后才开始运行的。子进程在结束的时候exit函数的参数是3,wait函数的参数status原来是10,现在变成了3。说明wait函数具有阻塞功能,还可以存放子进程退出状态。

这里有一个小细节,打印ststus的值的时候,你不能直接写ststus=%d\n"status,而是写成

ststus=%d\n",WEXITSTATUS(status)的样子,没办法,书本规定的。

三、子进程变成孤儿进程

   如果创建了子进程,并且父进程运行完了之后,就直接结束了,这时候子进程就会变成了孤儿进程。就好比一个孩子刚出世,父亲没了一个道理。但是linux中为了防止孤儿进程较多,init进程会收留孤儿进程,变成这些孤儿进程的父进程。这就好比刚出生的孩子没了亲生父亲,但是却有个后爹。

下面我们用代码验证一下

运行结果如下,这里还有个小问题,就是有可能你运行出来的“养父”pid的结果不是1。这是因为我们目前使用的是在图形界面打开的terminal是伪终端,需要切换界面,切换到字符型界面,命令如下:

图形界面切换到字符型界面:
Crtl+Alt+F3/Ctrl+Fn+Alt+F3
字符型界面切换到图形界面:
Ctrl+Alt+F2/Ctrl+Fn+Alt+F2

再运行程序,父进程pid变为1.成功。(细节可参考这位大佬的博客,http://t.csdnimg.cn/KsvG7)

下图就是切换到字符型界面的结果

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

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

相关文章

科普栏目|智能酒精壁炉 vs. 传统取暖:优势对比一目了然

随着科技的飞速发展,家居取暖方式也在逐渐朝着智能化、高效能源利用的方向迈进。在众多壁炉类型中,智能酒精壁炉以其独特的优势正成为现代家庭取暖的选择,下面将详细探讨智能酒精壁炉相较其他类型壁炉的卓越之处。 1.智能酒精壁炉采用酒精作为…

开发设计和迭代管理效率提升:PDManer元数建模

一、引言 在复杂多变的软件开发全生命周期中,数据库设计与建模扮演着举足轻重的角色。这一环节不仅关乎数据存储效率和应用性能优化,而且对于系统架构稳健性及业务逻辑清晰化具有深远影响。因此,选择一款功能强大且高效的数据库建模工具至关…

办公电脑监控软件推荐哪个 | 办公电脑监控软件价格

随着信息技术的不断发展,办公电脑监控软件已成为企业管理员工工作和保障信息安全的重要工具。 然而,市场上的办公电脑监控软件种类繁多,功能和价格也各不相同,让企业用户在选择时感到困惑。 一、办公电脑监控软件价格 办公电脑监…

FPC柔性化机器视觉缺陷检测

FPC(柔性电路板)在电子产品中扮演着至关重要的角色,其质量和可靠性直接影响到产品的性能和安全性。在FPC线路板加工过程中,由于制造工艺的复杂性,很容易产生各种缺陷,如焊锡不良、偏位、漏铜、短路等,因为有太多的环节…

2024年1月编程排行榜出炉!Python遥遥领先!

2024年1月TIOBE编程语言排行榜出炉啦!Python依然位于榜首,占比为13.97%。尽管本月有所下跌(2.39%),但它仍然是排名第一的编程语言。 2023年人工智能、AI崛起的趋势,Python的热度也一直遥遥领先。不止TIOBE编…

Android Launcher3各启动场景源码分析

文章目录 一、概述二、开机启动Launcher2.1、开机启动Launcher流程图2.2、开机启动流程源码分析 三、短压Home键启动Launcher3.1、短压Home键启动Launcher流程图3.2、短压Home键启动Launcher源码分析 四、Launcher异常崩溃后的自启动4.1、Launcher异常崩溃后的自启动流程图4.2、…

电力市场知识及市场出清电价(market clearing price)程序分享!

​Main-导览 一、电力市场概述 2000以前,国内并不存在电力市场,而是叫计划电力经济。发电侧为卖方,核算发电成本和利润上报国家,审核通过后就是上网电价。用户侧为买方,被动执行国家制定的分时电价。计划电力经济的优…

X-Bogus加密参数分析与jsvmp算法(仅供学习)

文章目录 1. 抓包分析2. X-Bogus参数分析 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫…

golang 中使用 statik 将静态资源编译进二进制文件中

现在的很多程序都会提供一个 Dashboard 类似的页面用于查看程序状态并进行一些管理的功能,通常都不会很复杂,但是其中用到的图片和网页的一些静态资源,如果需要用户额外存放在一个目录,也不是很方便,如果能打包进程序发…

Rust基础语法1

所有权转移,Rust中没有垃圾收集器,使用所有权规则确保内存安全,所有权规则如下: 1、每个值在Rust中都有一个被称为其所有者(owner)的变量,值在任何时候只能有一个所有者。 2、当所有者离开作用域…

【EI会议征稿通知】第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)

第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024) 2024 7th International Conference on Advanced Electronic Materials, Computers and Software Engineering 第七届先进电子材料、计算机与软件工程国际学术会议(AEMCSE 2024)将于2024年5月10-1…