调度器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时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...
随机推荐
- libco 源码剖析(1): 协程上下文切换之 32 位
libco 源码剖析(1): 协程上下文切换之 32 位 相关背景资料 关于汇编语言及内存布局相关基础,参看 参考文献[0], 参考文献[1] 32 位协程上下文结构如下: // coctx.h st ...
- UI自动化中上传与唤醒弹窗
本篇想谈的是在ui自动化中对上传的一些理解,干货满满. 一.是否有必要唤醒弹窗 以selenium为代表的库在进行文件上传时,是可以直接对输入框 "发送" 文件的,其send_ke ...
- JZOJ 2022.01.21【提高A组】模拟
简要题解加心得 不得不说这是我打得比较痛苦且改得比较痛苦的一套题了 \(\text{T1 1085. [GDOI2008]彩球游戏}\) 整整改了三个半小时 直接崩溃了 明明本地可以跑过去,偏偏 \( ...
- JZOJ 5344. 【NOIP2017模拟9.3A组】摘果子
题目 略 分析 又是一个显然的树形依赖背包 然而可以 \(O(nm)\) 依靠 \(dfs\) 序来 \(dp\) \(Code\) #include<iostream> #include ...
- CF1372D Omkar and Circle
题目传送门 思路 这是一道非常简单的 \(\mathcal *2100\). 既然他样例给的那么简单,说明这是一道结论题. 于是我们可以手玩几组数据试试. 例如 \(3,5,9,8,12\) 这组,发 ...
- CSS 页面整体变灰色
body {-webkit-filter: grayscale(100%) !important;-moz-filter: grayscale(100%) !important;-ms-filter: ...
- 解决veture和eslint冲突的问题
vscoder自带的veture和eslint存在冲突,主要表现在 末尾逗号,分号,单双引号的不一致.解决办法:1.npm install --save-dev prettier2.在根目录新建.pr ...
- 第一个webpack例子demo1
1.运行webpack 在当前目录 管理员CMD下运行命令 : webpack PS: 只有安装webpack时才必须在管理员环境下运行,如今使用可以随便 问题1: 运行中会遇报错: 错误分析:HTM ...
- vue还可以这样写
1.这两种写法都可以: var vm = new Vue({ data(){ return { scaleFlag:'big', } }, //data:{}, created: function ( ...
- CF818G - Four Melody
题意:对于一个序列,令一个 \(melody\) 为一个子序列满足子序列的相邻两项相差 \(1\) 或者模 \(7\) 同余.现在提取四个不重合的 \(melody\),求最长总长度. 我们先考虑暴力 ...