Linux下进程终止过程
不管是在什么系统中,当进程终止之后。系统都须要释放进程占有的资源。
否则。系统资源会被耗尽。
以下将具体说明Linux系统中,进程终止的过程。
进程终止方式
linux的进程终止方式有8种,当中5种是正常终止,各自是:
- 从main函数返回。
- 调用exit函数。
- 调用_exit或_Exit。
- 最后一个线程从其启动例程返回。
- 最后一个线程调用pthread_exit。
- 调用abort函数。
- 接收到信号并终止。
- 最后一个线程对取消请求做出响应。
进程终止过程
而进程描写叙述符、内核栈这些资源则须要父进程来回收。
进程自身资源释放
借用一张网上的图,表演示样例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHV6aHV0dXpodQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
- 将task_struct(内核中表示进程的数据结构)中的标志成员设置为PF_EXITING。
- 调用del_timer_sync()删除任一内核定时器。
- 假设BSD的进程记账功能是开启的,调用acct_update_integrals()输出记账信息。
- 调用exit_mm()函数,释放进程占有的mm_struct。
- 调用sem_exit()函数。释放进程的信号量。
- 调用exit_files()和exit_fs(),分别递减文件描写叙述符和文件系统数据的引用计数。
- 把存放task_struct的exit_code成员中的任务退出码置为exit()提供的退出码。
- 调用exit_notify()向父进程发信号。给子进程又一次找父进程,新的父进程为进程组中其它进程或者init进程。并把进程状态置为EXIT_ZOMBIE。
- do_exit()调用schedule()切换到新的进程。
由于处于EXIT_ZOMBIE状态的进程不会再被调度,所以这是进程运行的最后一段代码。
释放进程剩余的资源
Linux下进程终止过程的更多相关文章
- 《linux下进程的创建,执行,监控和终止》
<linux下进程的创建,执行,监控和终止> http://blog.csdn.net/miss_acha/article/details/43671047 http://blog.csd ...
- 【Linux下进程机制】从一道面试题谈linux下fork的运行机制
今天一位朋友去一个不错的外企面试linux开发职位,面试官出了一个如下的题目: 给出如下C程序,在linux下使用gcc编译: #include "stdio.h" #includ ...
- 【网络编程基础】Linux下进程通信方式(共享内存,管道,消息队列,Socket)
在网络课程中,有讲到Socket编程,对于tcp讲解的环节,为了加深理解,自己写了Linux下进程Socket通信,在学习的过程中,又接触到了其它的几种方式.记录一下. 管道通信(匿名,有名) 管道通 ...
- linux 下进程通讯详解
linux 下进程通讯方法主要有以下六种: 1.管道 2.信号 3.共享内存 4.消息队列 5.信号量 6.socket
- 在Linux下安装PHP过程中,编译时出现错误的解决办法
在Linux下安装PHP过程中,编译时出现configure: error: libjpeg.(a|so) not found 错误的解决办法 configure: error: libjpeg.(a ...
- Linux下进程的建立
Linux下进程的建立 我们都知道,进程就是正在执行的程序.而在Linux中,可以使用一个进程来创建另外一个进程.这样的话,Linux的进程的组织结构其实有点像Linux目录树,是个层次结构的,可以使 ...
- Linux下进程通信的八种方法
Linux下进程通信的八种方法:管道(pipe),命名管道(FIFO),内存映射(mapped memeory),消息队列(message queue),共享内存(shared memory),信号量 ...
- Linux下进程间管道通信小作业
在进行这次作业之前,我们先来看看什么是管道吧! 管道是Linux中很重要的一种通信方式,是把一个程序的输出直接连接到另一个程序的输入,常说的管道多是指无名管道,无名管道只能用于具有亲缘关系的进程之间, ...
- FFmpeg在Linux下安装编译过程
转载请把头部出处链接和尾部二维码一起转载,本文出自:http://blog.csdn.net/hejjunlin/article/details/52402759 今天介绍下FFmpeg在Linux下 ...
随机推荐
- [转载]CentOS 7虚拟机下设置固定IP详解
在 复制 他人作品之前,是因为我再此“跌倒”过一次,虽然原主说是永久地址,但是地址失效 不可避免.所以就原封不动的copy了过来,我自己也是按照他的一步一步配置的,我成功了,相信你们也会成功. 如果不 ...
- Python组织文件 实践:查找大文件、 用Mb、kb显示文件尺寸 、计算程序运行时间
这个小程序很简单原本没有记录下来的必要,但在编写过程中又让我学到了一些新的知识,并且遇到了一些不能解决的问题,然后,然后就很有必要记录一下. 这个程序的关键是获取文件大小,本来用 os.path.ge ...
- C# 从需要登录的网站上抓取数据
[转] C# 从需要登录的网站上抓取数据 背景:昨天一个学金融的同学让我帮她从一个网站上抓取数据,然后导出到excel,粗略看了下有1000+条记录,人工统计的话确实不可能.虽说不会,但作为一个学计算 ...
- hibernate session.save()和session.persist()的区别
save()需要返回一个Serialzable的实现类,因此执行这个方法时会马上插入到数据库 而persist()不会立即插入到数据库. "当我们封装一个长会话流程的时候,persist() ...
- 将IP表存入SQL里的程序
将IP表存入SQL里的程序 写得比較粗糙,另一点错误,只是能达到效果.请大家測试 create.asp ---------------------------------------------- ...
- 85.explicit作用
#include <iostream> using namespace std; class myclass { public: int num; public: explicit myc ...
- SQL调用Webservices
IF NOT object_id('proc_CallWebServices') IS NULL DROP PROCEDURE proc_CallWebServices GO CREATE PROCE ...
- POJ 1966 求无向图点连通度
思路: n^2枚举(必须要n^2枚举啊)+拆点 特此嘲讽网上诸多垃圾题解,你们许多都是错的 -yyh //By SiriusRen #include <queue> #include &l ...
- Mysql学习总结(9)——MySql视图原理讲解与使用大全
一. 视图概述 视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且 ...
- CodeForcesGym 100502K Train Passengers
Train Passengers Time Limit: 1000ms Memory Limit: 524288KB This problem will be judged on CodeForces ...