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相关推荐

  1. linux 用户态与内核态通信方式简介

    我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式.(关于 Linux 用户态和内核态可以参考 xx) 除此之外,还有以下四种方式: pro ...

  2. 【Linux开发】linux设备驱动归纳总结(一):内核的相关基础概念

    linux设备驱动归纳总结(一):内核的相关基础概念 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. linux 应用层编程之内核链表list的使用

    linux内核提供了一个经典通用的双向循环链表list的实现,任何模块都可以借助该接口实现自己的内部循环链表.因为是通用的,可以直接移植到用户态中使用,下面介绍相关的接口与一个简单操作例子,包括链表的 ...

  4. Linux内核的l2tp实现,Linux Kernel gdth实现内核内存破坏漏洞

    Linux Kernel gdth实现内核内存破坏漏洞 发布日期:2010-11-04 更新日期:2010-11-16 受影响系统: Linux kernel 2.6.x 描述: ---------- ...

  5. linux内核5.3支持cpu,Linux 5.3版内核重磅发布:支持中国兆芯x86 CPU

    经过两个月的开发和八个RC候选版本之后,Linus Torvalds今天终于正式发布了Linux Kernel 5.3版内核.虽然因为旅游耽误了一个星期,但是这个版本带来了诸多重磅更新,值得等待和升级 ...

  6. 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 ...

  7. linux 内核将两个设备相关联,linux用户空间和内核空间交换数据

    转载地址:http://www.poluoluo.com/server/201107/138420.html 在研究dahdi驱动的时候,见到了一些get_user,put_user的函数,不知道其来 ...

  8. 熟悉linux系统内核,[科普] Linux 的内核与 Linux 系统之间的关系

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 在 FHS 协议里,有这样的规定: /bin/ 需要在单用户模式可用的必要命令(可执行文件):面向所有用户,例如: cat. ls. cp. /boot/ ...

  9. 使用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 ...

最新文章

  1. MATLAB的size()函数的返回值是一个1*2的向量哦,即使参数是向量也是1*2的向量哦!
  2. 代理服务器工作原理是什么?
  3. 九十九、Python所学经验分享
  4. 英文seo外链资源整合,怎么样找国外博客资源?
  5. 《Google官方SEO指南》十一:以恰当的方式推广你的网站
  6. How ASP.NET MVC Works?
  7. 松阳天气预报软件测试,松阳天气预报15天
  8. 985博士妈妈辅导女儿作业被气哭:博士父母带娃真是太难了...
  9. OSPF报文详解——LSA概述
  10. docker学习总结二
  11. pip下载速度慢的解决办法
  12. cannot import name 'NPCAP_PATH'
  13. linux系统下回收站,Linux怎么开启回收站功能
  14. Graphics2D的使用详情
  15. MSP430F157IPMR 超低功耗 MCU 封装:LQFP64
  16. SSM整合之CRUD增删改查案例(非ajax版)
  17. Android10有sdcard读写权限,仍无法读写sdcard中文件问题解决
  18. AJAX基础教程zz
  19. 黑马程序员前端实战项目---PC端品优购(下)
  20. 在安卓手机安装Linux

热门文章

  1. 计算机题windows如何操作,2015年职称计算机Windows操作系统模拟题(二)
  2. 三星r381android+wear,三星新路线图:Android Wear手表/Tizen手机
  3. python unpack函数_Python numpy.unpackbits函数方法的使用
  4. 每日一皮:每天到公司 VS 工作一小时后
  5. 面试 | 创建多少个线程合适,该怎么回答?
  6. Spring Cloud Config Server迁移节点或容器化带来的问题
  7. c语言检测四个方向键盘输入,如何既检测鼠标单击又检测键盘输入
  8. Pytorch 计算参数量与计算量Flops
  9. TensorFlow如何充分使用所有CPU核数,提高TensorFlow的CPU使用率,以及Intel的MKL加速
  10. 观点 | 商汤科技联合创始人林达华:深度学习遭遇瓶颈,未来之路需要新的思考