调度器42—进程exit退出流程
基于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。
调度器42—进程exit退出流程的更多相关文章
- Linux进程核心调度器之主调度器schedule--Linux进程的管理与调度(十九)
主调度器 在内核中的许多地方, 如果要将CPU分配给与当前活动进程不同的另一个进程, 都会直接调用主调度器函数schedule, 从系统调用返回后, 内核也会检查当前进程是否设置了重调度标志TLF_N ...
- Linux CFS调度器之task_tick_fair处理周期性调度器--Linux进程的管理与调度(二十九)
1. CFS如何处理周期性调度器 周期性调度器的工作由scheduler_tick函数完成(定义在kernel/sched/core.c, line 2910), 在scheduler_tick中周期 ...
- Linux核心调度器之周期性调度器scheduler_tick--Linux进程的管理与调度(十八)
我们前面提到linux有两种方法激活调度器:核心调度器和 周期调度器 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测是否有必要 因 ...
- shell脚本监控调度器/proc进程是否运行(嵌套循环)
/proc/<pid>/schedstat $/schedstat First: , Second:time spent waiting on a runqueue,这个值与上面的se.w ...
- Linux进程管理 (2)CFS调度器
关键词: 目录: Linux进程管理 (1)进程的诞生 Linux进程管理 (2)CFS调度器 Linux进程管理 (3)SMP负载均衡 Linux进程管理 (4)HMP调度器 Linux进程管理 ( ...
- Erlang 进程被抢占的条件——一个进程长时霸占调度器的极端示例
最近研究 binary 的实现和各种操作对应的 beam 虚拟机汇编指令,发现有一些指令序列是不可重入的,比如说有的指令构造一个上下文(也就是某种全局状态),然后下一条指令会对这个上下文做操作(具体的 ...
- Erlang/OTP 17.0-rc1 新引入的"脏调度器"浅析
最近在做一些和 NIF 有关的事情,看到 OTP 团队发布的 17 rc1 引入了一个新的特性“脏调度器”,为的是解决 NIF 运行时间过长耗死调度器的问题.本文首先简单介绍脏调度器机制的用法,然后简 ...
- 调度器简介,以及Linux的调度策略
进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
- linux调度器源码分析 - 概述(一)
本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 引言 调度器作为操作系统的核心部件,具有非常重要的意义,其随着linux内核的更新也不断进行着更新.本系列文章通 ...
- 调度器简介,以及Linux的调度策略(转)
进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
随机推荐
- print()、转义字符、标识符和保留字、变量、数据类型、类型转换
安装 1.安装对应版本的Python,并进行相应的测试 2.安装对应版本的PyCharm并配置相关的内容 print()函数 输出内容是数字 输出内容是字符串 输出的内容是含有字符串的运算符的表达式 ...
- Excel文件 利用MySQL/Python 实现自动处理数据的功能
目录 问题描述: 解决方案: 一.SQL查询 二.SQL.python处理 三.python处理 四.优化python处理 1.手动执行代码 2.开机自动执行代码 对比四种方案: 总结: 问题描述: ...
- 以docker方式部署的redis键值查询及清理
1.首先使用 docker ps 命令来查看正在运行的容器.该命令会列出容器的ID.名称.端口号.状态等信息.也可以使用 docker ps -a 命令来查看所有容器,包括已经停止的容器. docke ...
- Linux服务器数据备份恢复
转载csdn: https://blog.csdn.net/weixin_33794672/article/details/92894022
- Cobalt Strike 之:提权
郑重声明: 本笔记编写目的只用于安全知识提升,并与更多人共享安全知识,切勿使用笔记中的技术进行违法活动,利用笔记中的技术造成的后果与作者本人无关.倡导维护网络安全人人有责,共同维护网络文明和谐. Co ...
- vue弹窗后如何禁止滚动条滚动
toggleBody(isPin){ if(isPin){ document.body.style.height = '100vh' document.body.style['overflow-y'] ...
- .Net DI(Dependency Injection)依赖注入机制
1.简介 DI:Dependency Injection,即依赖注入,他是IOC的具体实现. 在DI中,底层服务对象不再负责依赖关系的创建,而是交由顶端调用进行管理注入 好处:降低组件之间的耦合度,使 ...
- mysql-8版本优化建议
mysql-8版本优化 参考官方文档:https://dev.mysql.com/doc/refman/8.0/en/
- Kali配置gmssl密码算法库
Kali配置gmssl密码算法库 一.密码算法库的下载 https://github.com/guanzhi/GmSSL/releases 二.安装配置 1 解压 把刚刚下载的GmSSL 3.0.0. ...
- SpringBoot常用注解大全
常用注解概览 这里整理了一张SpringBoot常用注解的思维导图,本文主要讲解这些注解的用法. 组件相关注解 @ComponentScan 默认扫描当前包及其子包下面被@component,@Con ...