首页 > 系统相关 >调度器44—进程退出流程

调度器44—进程退出流程

时间:2023-02-16 22:34:25浏览次数:39  
标签:code tsk 44 调度 exit 进程 panic 流程

基于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。

 

标签:code,tsk,44,调度,exit,进程,panic,流程
From: https://www.cnblogs.com/hellokitty2/p/17128535.html

相关文章

  • 2.16流程控制
      流程控制分支结构:分支结构就是根据条件判断的真假去执行不同分支对应的子代码注意事项: 1.根据条件的成立与否,决定是否执行if代码块 2.我们通过缩进代......
  • SpringMVC源码(八):Controller控制器执行流程
    在MVC请求流程中,获取到HandlerAdapter适配器后,会执行handler处理器(Controller控制器)的相关逻辑,通过适配器的handle()方法,完成目标Controller处理器的调用。在源码(七......
  • AB实验基本流程
       知识点       基本流程       实验分层问题       最小样本量计算           均值类           比值类    ......
  • 流程引擎Camunda 7 快速开始
    根据官方文档快速搭架一个基于BPMN的流程引擎camundahttps://docs.camunda.org/get-started/quick-start/下载地址https://camunda.com/download/#download-other-menu......
  • CV-部署芯片接续-CV全流程部署-TF版本
    CV-部署芯片接续-CV全流程部署-TF版本1单个CNN算子importcv2importnumpyasnpimporttensorflowastfimportosfromtensorflow.python.frameworkimportgrap......
  • ignite系列之9-基于Cron的调度
    Runnable和Callable的实例在本地节点可以使用IgniteScheduler.scheduleLocal()方法和Cron语法进行调度用于周期性的执行示例:Igniteignite=Ignition.start(cfg);......
  • PowerAutomate 流程中如何使用环境变量
    因为我们需要把一些密钥保护起来,所以如果用环境变量就很方便。这个需要新建一个solution,然后在里面定义环境变量。在流程中,可以这么使用你还可以设置这个组件,保护输入......
  • ES 文档存储流程
    对于一个数据存储系统来说,如何保证数据可靠性、提高读写吞吐量是重中之重。一、文档分布式存储的流程我们知道ES的索引有一个或者多个分片,而分片又分为主分片和副本分......
  • Win10修改SMB连接(共文件夹)的默认端口(445),访问远程的共享文件夹
    前言基于安全的考虑,服务器端的SMB(共享文件夹)应用通过FRP等工具将SMB应用的445端口映射到了公网IP的其他端口,或者直接修改了SMB的默认端口(可参考最后一节目录)客户端无法像......
  • 快速搭建一个网关服务,动态路由、鉴权,一网打尽!(含流程图)
    作者:热黄油啤酒链接:https://juejin.cn/post/7004756545741258765前言本文记录一下我是如何使用Gateway搭建网关服务及实现动态路由的,帮助大家学习如何快速搭建一个网......