linux 子进程exit6,Linux内核之do_exit
do_exit(long code)
(1) __exit_mm(tsk): //释放存储空间
(2) sem_exit(); //释放用户空间的“信号量”
(3) __exit_files(tsk); //释放已经打开的文件
(4) __exit_fs(tsk); //释放用于表示工作目录等结构
(5) exit_sighand(tsk);//释放信号处理表
(6) exit_thread();
(7) tsk->exit_code = code;
(8) exit_notify(); //通知父进程该“退出”消息,父进程将负责回收这个进程描述符
(9) schedule();
exit_notify
(1)forget_original_parent:因为当前进程要“去世”,那么首先得把它所有的子进程托付给另外一个进程。如果当前这个进程是个线程(有点混乱,确切地说当前这个task实质上表示的是一个线程),那么就托服给线程组的下一个线程。否则,就托付给init进程。
(2)current->state = TASK_ZOMBIE
(3)do_notify_parent:告知父进程其子进程结束的消息
send_sig_info(..., tsk->p_pptr):向父进程发送信号通知其自身结束的消息
wake_up_parent(tsk->p_pptr): 唤醒父进程使之进入可调度队列(状态变为TASK_RUNNING)
forget_original_parent源码
static inline void forget_original_parent(struct task_struct * father)
{
struct task_struct * p, *reaper;
read_lock(&tasklist_lock);
reaper = next_thread(father); //这里等价于reaper=father.thread_group->next(循环链表)
if (reaper == father) //等于的情况说明没有线程组(就自己一个任务)
reaper = child_reaper;
for_each_task(p) {
if (p->p_opptr == father) { //等于的情况说明是自己的子进程 p->exit_signal = SIGCHLD; p->self_exec_id++; p->p_opptr = reaper; //将其托付给reaper if (p->pdeath_signal) send_sig(p->pdeath_signal, p, 0); //告知子进程自己“去世”的消息 } } read_unlock(&tasklist_lock);}
linux 子进程exit6,Linux内核之do_exit相关推荐
- linux 用户态与内核态通信方式简介
我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式.(关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: pro ...
- 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念
linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...
- linux 应用层编程之内核链表list的使用
linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表.因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的 ...
- Linux内核的l2tp实现,Linux Kernel gdth实现内核内存破坏漏洞
Linux Kernel gdth实现内核内存破坏漏洞 发布日期:2010-11-04 更新日期:2010-11-16 受影响系统: Linux kernel 2.6.x 描述: ---------- ...
- linux内核5.3支持cpu,Linux 5.3版内核重磅发布:支持中国兆芯x86 CPU
经过两个月的开发和八个RC候选版本之后,Linus Torvalds今天终于正式发布了Linux Kernel 5.3版内核.虽然因为旅游耽误了一个星期,但是这个版本带来了诸多重磅更新,值得等待和升级 ...
- linux 4.0内核编译选项,linux 2.40.20-8 内核编译选项.doc
linux 2.40.20-8 内核编译选项 内核编译配置选项简介 (2.4.20-8) 来源: ChinaUnix博客 日期: 2007.06.25 10:18 (共有0条评论) 我要评论 Code ...
- linux 内核将两个设备相关联,linux用户空间和内核空间交换数据
转载地址:http://www.poluoluo.com/server/201107/138420.html 在研究dahdi驱动的时候,见到了一些get_user,put_user的函数,不知道其来 ...
- 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...
- 使用2.26内核的linux,介绍linux 2.6.9-42内核升级到linux 2.6.26-42的方法
介绍linux 2.6.9-42内核升级到linux 2.6.26-42的方法 来源:互联网 作者:佚名 时间:2013-04-10 13:32 这篇升级Linux内容的文章,是基于Red Hat的L ...
最新文章
- MATLAB的size()函数的返回值是一个1*2的向量哦,即使参数是向量也是1*2的向量哦!
- 代理服务器工作原理是什么?
- 九十九、Python所学经验分享
- 英文seo外链资源整合,怎么样找国外博客资源?
- 《Google官方SEO指南》十一:以恰当的方式推广你的网站
- How ASP.NET MVC Works?
- 松阳天气预报软件测试,松阳天气预报15天
- 985博士妈妈辅导女儿作业被气哭:博士父母带娃真是太难了...
- OSPF报文详解——LSA概述
- docker学习总结二
- pip下载速度慢的解决办法
- cannot import name 'NPCAP_PATH'
- linux系统下回收站,Linux怎么开启回收站功能
- Graphics2D的使用详情
- MSP430F157IPMR 超低功耗 MCU 封装:LQFP64
- SSM整合之CRUD增删改查案例(非ajax版)
- Android10有sdcard读写权限,仍无法读写sdcard中文件问题解决
- AJAX基础教程zz
- 黑马程序员前端实战项目---PC端品优购(下)
- 在安卓手机安装Linux
热门文章
- 计算机题windows如何操作,2015年职称计算机Windows操作系统模拟题(二)
- 三星r381android+wear,三星新路线图:Android Wear手表/Tizen手机
- python unpack函数_Python numpy.unpackbits函数方法的使用
- 每日一皮:每天到公司 VS 工作一小时后
- 面试 | 创建多少个线程合适,该怎么回答?
- Spring Cloud Config Server迁移节点或容器化带来的问题
- c语言检测四个方向键盘输入,如何既检测鼠标单击又检测键盘输入
- Pytorch 计算参数量与计算量Flops
- TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速
- 观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考