`

窥探 kernel,just for fun --- 浅析do_exit

阅读更多

 

本系列文章由张同浩编写,转载请注明出处:http://blog.csdn.net/muge0913/article/details/7483054

邮箱:muge0913@sina.com


进程在退出时,必须释放它所拥有的资源,并通过某种方式告诉父进程。进程的退出一般是显示或隐式地调用了eixt(),或者接受了某种信号。不过什么原因退出,最终都调用了do_exit。




 

用于进程退出的系统调用有两个exit和exit_group,exit只是终止某个进程,而exit_group整个线程中的进程。它们在内核中的服务函数分别为sys_exit和sys_exit_group,它们又分别调用了do_exit和do_group_exit。而do_group最终又调用了do_exit。

 

do_exit定义在kernel/exit.c中:

僵死进程:僵死进程是一个进程已经退出,它的内存和资源已经释放掉了,但是位了时系统在它退出后能够获得它的退出状态等信息,它的进程描述符仍然保留。

一个进程退出时,它的父进程会接收到一个SIGCHLD信号,一般情况下这个信号的处理函数会执行wait系列函数等待子进程的结束。从子进程退出到父进程调用wait(子进程结束)的这段时间,子进程称为僵死进程。执行ps –ef命令以“z”结尾的为僵死进程。

 

僵死进程很特殊,它没有任何可执行代码,不会被调度,只有一个进程描述符用来记录退出等状态,除此之外不再占用其他任何资源。

 

如果僵死进程的父进程没有调用wait,则该进程会一直处于僵死状态。如果父进程结束,内核会在当前线程组里为其找一个父进程,如果没找到则把init作为其父进程,此时新的父进程将负责清楚其进程。如果父进程一直不结束,该进程会一直僵死。在root下用kill -9 也不能将其杀死。


下面只对do_exit重点地方解析下:


  1. struct task_struct *tsk = current;//获取当前要释放进程的进程描述符  


 

  1. exit_signals(tsk);  /* sets PF_EXITING 以免内和其他部分访问该进程*/  


 

 

  1. exit_mm(tsk);  
  2.   
  3.     if (group_dead)  
  4.         acct_process();  
  5.     trace_sched_process_exit(tsk);  
  6.   
  7.     exit_sem(tsk);  
  8.     exit_files(tsk);  
  9.     exit_fs(tsk);  
  10.     check_stack_usage();  
  11.     exit_thread();  


  1. /*更新父子关系,并告诉父进程正在退出*/  
  2.     exit_notify(tsk, group_dead);  


 

最后要切换为其他进程

更多信息请查看 java进阶网 http://www.javady.com

  1. /*切换到其他进程*/  
  2.     schedule();  
分享到:
评论

相关推荐

    Qt源码窥探(1)---创建窗口过程图解

    Qt源码窥探(1)---创建窗口过程图解。。

    从问界窥探华为智能汽车布局-2022-10-新势力

    【华为智能汽车布局】 华为作为全球知名的科技巨头,在近年来逐渐涉足智能汽车领域,尤其是在新能源汽车市场,华为通过三种合作模式——零部件模式、HI模式(Huawei Inside模式)、智选车模式,展现了其在汽车行业...

    e-Border-driver-win_3_5_1

    标题中的“e-Border-driver-win_3_5_1”显然指的是一个特定版本的软件,即e-Border驱动程序的Windows版本,版本号为3.5.1。...通过这个软件,用户可以有效地绕过某些网络限制,同时保护他们的网络活动免受窥探。

    ttx.rar_SANSUI-A-A7CD_teletext_teletext解析

    总结,SANSUI-A-A7CD Teletext解析源代码为我们提供了一个难得的机会,去窥探过去的技术如何在现代设备中实现,同时也揭示了早期交互式信息系统的原理。通过深入学习和分析,我们可以从中获得宝贵的知识和经验,这...

    Python库 | pspy-1.4.7-cp37-cp37m-macosx_10_9_x86_64.whl

    `pspy`的名字来源于“process spy”,即进程间窥探,它为开发人员提供了一个方便的接口来获取和分析运行中的进程信息。 `pspy-1.4.7-cp37-cp37m-macosx_10_9_x86_64.whl`这个文件是一个预编译的Python轮子包(wheel...

    jdk-9-ea-bin-b53-linux-x64-04_mar_2015.tar

    这个压缩包文件,标志着JDK 9开发过程中的一个重要里程碑,为我们提供了窥探新特性、改进和优化的窗口。 首先,"ea"(Early Access)表明这是JDK 9的一个早期预览版本,用于开发者测试和反馈,帮助Oracle公司在正式...

    µTorrent_3.31_Build_30017-BYRBT

    8. **安全性**: μTorrent支持加密连接,保护用户的下载活动免受窥探,同时还有防止病毒和恶意软件的内置保护。 9. **BYRBT**: BYRBT可能是指某个社区或种子库的标识,表明这个μTorrent版本可能是从这个特定的社区...

    信息安全_数据安全_窥探安卓内核.pdf

    窥探安卓内核 企业安全 物联网安全云安全 安全意识教育 安全管理

    大数据初次窥探---第一节.docx

    大数据是21世纪信息技术发展的重要领域,它标志着我们正从传统的IT时代迈向DT时代。DT时代强调以数据为中心,利用先进的数据处理技术提升服务质量、驱动生产力。马云曾指出,DT时代将取代IT时代,成为未来的主要发展...

    FileZilla_3.63.2.1_macosx-x86.zip

    SSL/TLS加密支持:确保数据传输的安全性,无论是使用FTPS还是SFTP协议,都能保护数据免遭窥探。 防火墙支持:兼容大多数代理和防火墙设置,适合在各种网络环境下使用。 队列管理:用户可以安排文件传输的顺序,...

    VB源代码-文本防窥探工具.doc

    ### VB源代码-文本防窥探工具知识点解析 #### 一、概述 本文将深入解析一个基于Visual Basic(简称VB)编写的文本防窥探工具的源代码。该工具主要功能在于实现文本文件的安全加密与解密操作,通过简单的用户界面...

    沟通能力人才测评试题-智尊测评_嵌入式-常用知识&面试题库_大厂面试真题.pdf

    例如,当发现有同事希望担任你的职位时,可以选择主动接触,而不是无视或暗中窥探。 在与同事的日常互动中,诚实和公平的沟通原则很重要。如果竞争对手向你借书,大方地借出是一种展示胸怀的方式,而不是试图贬低...

    PyPI 官网下载 | pwclip-1.1.3.linux-x86_64.tar.gz

    它可能使用操作系统级别的安全特性来保护密码不被窥探。 2. **剪贴板交互**:库可能提供了与系统剪贴板交互的API,允许程序读取、写入或清除剪贴板内容,特别适用于需要处理敏感信息的场景。 3. **加密/解密**:...

    「风险评估」窥探安卓内核 - 应急响应.zip

    《风险评估:窥探安卓内核 - 应急响应》 在当今数字化社会,信息安全的重要性不言而喻,特别是对于移动设备操作系统,如安卓内核的安全性更是关注的焦点。本资料集中,我们将深入探讨“风险评估”在安卓内核中的...

    FileZilla_3.63.2.1_win64_sponsored2-setup.zip

    SSL/TLS加密支持:确保数据传输的安全性,无论是使用FTPS还是SFTP协议,都能保护数据免遭窥探。 防火墙支持:兼容大多数代理和防火墙设置,适合在各种网络环境下使用。 队列管理:用户可以安排文件传输的顺序,...

    FileZilla_3.63.2.1_win32-setup.zip

    SSL/TLS加密支持:确保数据传输的安全性,无论是使用FTPS还是SFTP协议,都能保护数据免遭窥探。 防火墙支持:兼容大多数代理和防火墙设置,适合在各种网络环境下使用。 队列管理:用户可以安排文件传输的顺序,...

    窥探Docker中的Volume Plugin内幕-有容云

    Docker技术是当前容器化部署领域中非常热门的一个话题,它为应用提供了轻量级、可移植的运行环境,极大地简化了应用的分发、扩展以及维护工作。在Docker的众多功能中,Volume Plugin是一个非常重要的组成部分,它...

Global site tag (gtag.js) - Google Analytics