基于Linux-5.10

一、do_exit()简要流程

1. 执行路径

各驱动和内核机制中直接调用
SYSCALL_DEFINE1(exit, int, error_code) //exit.c 将 (error_code&0xff)<<8 传给参数 code
do_exit(code);
if (unlikely(in_interrupt())) //当前进程关中断后退出了,panic。
panic("Aiee, killing interrupt handler!");
if (unlikely(!tsk->pid)) //当前进程关抢占后退出了,panic。
panic("Attempted to kill the idle task!");
exit_signals(tsk);
tsk->flags |= PF_EXITING; //标记进程正在退出
if (unlikely(is_global_init(tsk))) //init进程退出了,panic。
panic("Attempted to kill init! exitcode=0x%08x\n", tsk->signal->group_exit_code ?: (int)code);
tsk->exit_code = code; //更新退出码
exit_notify(tsk, group_dead);
tsk->exit_state = EXIT_ZOMBIE;
exit_rcu(); //通知RCU进程退出了
do_task_dead
tsk->state |= TASK_DEAD;
tsk->flags |= PF_NOFREEZE; /* Tell freezer to ignore us: */
__schedule(false);

可以看到:

(1) 调用exit()的执行流程最终只是将进程状态设置为 TASK_DEAD,然后切走了,在这个流程中并没有释放 task_struct 结构。
(2) 关中断和原子上下文执行exit流程会报panic。

最新文章

  1. commons-lang包中我们常用的类的作用
  2. Oracle客户端配置
  3. 深入浅出设计模式——单例模式(Singleton Pattern)
  4. Robberies(HDU2955):01背包+概率转换问题(思维转换)
  5. [USACO2004][poj2373]Dividing the Path(DP+单调队列)
  6. 基于HTML5实现五彩连珠小游戏
  7. Javascript的动态运动(1)
  8. asp.net中当服务器出错时显示指定的错误页面
  9. ubuntu下怎么合并windows下分割的zip包
  10. 把Orchard部署到Windows Azure Web Sites
  11. WPF WebBrowser Memory Leak 问题及临时解决方法
  12. ace_tree总结。各类问题解决办法汇集
  13. Statistics in Python
  14. toggle显示与隐藏切换
  15. A - Jugs ZOJ - 1005 (模拟)
  16. Java Web部署到tomcat后,使用动态编译无法找到相关类的解决方案
  17. OC基础:数组.字典.集 分类: ios学习 OC 2015-06-18 18:58 47人阅读 评论(0) 收藏
  18. Spring配置连接池
  19. 【react router路由】&lt;Router&gt; &lt;Siwtch&gt; &lt;Route&gt;标签
  20. Linux新手随手笔记1.9-使用Apache搭建网站

热门文章

  1. RocketMQ - 生产者最佳实践总结
  2. C#后缀表达式解析计算字符串公式
  3. 嵌入式Linux—FreeType矢量字体
  4. liunx Ubuntu20.04怎么安装mysql
  5. Python常见面试题006 类方法、类实例方法、静态方法有何区别?
  6. K8S 实用工具之一 - 如何合并多个 kubeconfig?
  7. 自定义StringByteLength
  8. mapreduce和yarn集群
  9. Android图表控件MPAndroidChart——BarChart实现多列柱状图和LineChart多曲线 (完结)
  10. unity 实现Game窗口的Stats 【转自蛮牛】