首页
学习
活动
专区
圈层
工具
发布

Linux进程退出详解(do_exit)--Linux进程的管理与调度(十四)

Linux进程的退出 linux下进程退出的方式 正常退出 从main函数返回return 调用exit 调用_exit 异常退出 调用abort 由信号终止 _exit, exit和_Exit的区别和联系..._exit是linux系统调用,关闭所有文件描述符,然后退出进程。...这个信息我们已经讨论过很多次了 参见 Linux进程ID号–Linux进程的管理与调度(三) Linux进程描述符task_struct结构体详解–Linux进程的管理与调度(一)...调用do_exit()函数,把进程的终止代码传递给它。正如我们将在下面看到的,do_exit()杀死进程而且不再返回。...(exit_code); /* NOTREACHED */ } do_exit流程 进程终止所要完成的任务都是由do_exit函数来处理。

6.9K31
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Linux 内核】进程管理 ( 进程状态 | 进程创建 | 进程终止 | 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 )

    文章目录 一、进程状态 二、进程创建 三、进程终止 ( 调用 exit 系统调用函数主动退出 | main 函数返回自动退出 | kill 杀死进程 | 执行异常退出 ) 一、进程状态 ---- Linux...时间片被分配给了该进程 , 正在 CPU 中执行该进程 ; 阻塞状态 : 等待被分配 CPU 时间片的过程 中 , 处于该状态 ; 终止状态 : 进程 终止后的状态 ; 状态之间的转换 , 参考 【Linux...内核】进程管理 ( Linux 中进程的 CPU 资源调度 | 进程生命周期 | 创建状态 | 就绪状态 | 执行状态 | 阻塞状态 | 终止状态 | 进程生命周期之间的转换 ) 博客 ; 二、进程创建...---- 进程创建 , 参考 【Linux 内核】进程管理 ( 进程相关系统调用源码分析 | fork() 源码 | vfork() 源码 | clone() 源码 | _do_fork() 源码 |...-5.6.18\kernel\exit.c 源码中 , SYSCALL_DEFINE1(exit, int, error_code) { do_exit((error_code&0xff)<<8);

    3.5K20

    【Linux】僵尸进程、进程状态简介

    如果您有其他想要了解的,欢迎私信联系我~ 僵尸进程 在 Linux 系统中,僵尸进程(Zombie Process)是一种特殊的进程状态,是指一个子进程执行完成后,其父进程尚未读取其退出状态、没有对其资源和状态信息进行回收...进程状态 在 Linux 系统中,进程(Process)和线程(Thread)均由 task_struct{} 结构表示。...task_struct{} 结构实质上表示任务(Task),是 Linux 系统中调度的基本单位,通常为了简明将其统称为进程。...Linux 进程从创建(Fork)到终止(Exit)的状态转换过程如下图。...通过 ps ef 命令查看时,处于该状态的进程具有 “D” 标识 当一个进程终止并调用 do_exit() 期间,还有两种与进程终止相关的状态: EXIT_DEAD:此状态表示进程真正退出的时间 EXIT_ZOMBIE

    93010

    你需要了解的 Linux 进程管理

    Linux 进程管理 对于一个操作系统来说,提供运行程序的能力是其本质,而在 Linux 中,轻量、相应快速的进程管理也是其优良特性之一。我会分两篇文章介绍 Linux 进程。...这是第一篇,重点在于 Linux 进程的描述和生命周期,下一篇将介绍 Linux 下的进程调度。...内核线程启动后就一直运行直到调用 do_exit()退出,或者由内核其他部分调用 kthread_stop() 退出,线程或者进程的终结,将在下面介绍。...但无论是主动或者被动,进程结束时都要靠 do_exit() 函数(定义在 kernel/exit.c)来 “处理身后事”: 将 task_struct 中的标记成员设置为 PF_EXITING 调用 del_timer_sync...调用 schedule() 释放执行权,因为此进程已经设置为僵死状态,所以该进程再也不会被执行, do_exit() 永不会返回。

    77710

    Signal 信号量使用详解 | Python基础

    linux中信号被用来进行进程间的通信和异步处理,简单地可以理解会为回调函数,当发送一个信号时,触发相应的操作。...signal是python中用来处理信号的模块,主要针对UNIX类平台,比如:Linux、MAC OS等。 Python支持的信号和Linux内置信号几乎一致。...但在 os 包中,有类似于 Linux 的 kill 命令的函数: os.kill(pid, sid) 给某一进程发送终止信号 os.killpg(pgid, sid) 给某一进程组发送终止信号 # -...import time # 执行打印 def receive_signal(signum, stack): print('Received:', signum) # 执行退出操作 def do_exit...设置用户自定义信号 1 signal.signal(signal.SIGUSR1, receive_signal) # 设置用户自定义信号 2 signal.signal(signal.SIGUSR2, do_exit

    2.9K40

    Linux 是否有 zombie thread?源码探究分析

    pthread 在 Linux 上一般是由 libc 实现的,最常见的 libc 是 glibc(另一个 Linux 上常用的 libc 的例子是 musl,更轻量,不展开)。...,我们发现子线程的 task 在用户态是正常 sys_exit 退出的,但是 sys_exit 后 pid 以及 task_struct 被马上回收掉,而不是像普通进程一样进入僵尸状态,这里看到内核 do_exit...:727 // 不用仔细看这个函数的每一步,这里全放出来只是为了体现步骤有多么多而已 void __noreturn do_exit(long code) { struct task_struct *...); 可以看到一个 task 退出时需要清理/释放的资源种类非常之多,主流程do_exit()里的子流程函数调用就有好几十个了。...注意到该结论只适用于 Linux,因为 Linux 实现线程的方式为内核轻改动,大多数线程相关的功能实现都在用户态中实现(glibc)。

    2.1K21

    深入理解Linux内核之内核线程(上)

    1.开场白 环境: 处理器架构:arm64 内核源码:linux-5.11 ubuntu版本:20.04.1 代码阅读工具:vim+ctags+cscope 在linux系统中, 我们接触最多的莫过于用户空间的任务...,像用户线程或用户进程,因为他们太活跃了,也太耀眼了以至于我们感受不到内核线程的存在,但是内核线程却在背后默默地付出着,如内存回收,脏页回写,处理大量的软中断等,如果没有内核线程那么linux世界是那么的可怕...2.kthreadd的诞生 盘古开天辟地,我们知道linux所有任务的祖先是0号进程,然后0号进程创建了天字第一号的1号init进程,init进程是所有用户任务的祖先,而内核线程同样也有自己的祖先那就是...调用路径如下: include/linux/kthread.h #define kthread_run(threadfn, data, namefmt, ......KTHREAD_SHOULD_STOP标志是否置位 } 在某个内核路径调用kthread_stop,内核线程每次循环开始的时候,如果检查到KTHREAD_SHOULD_STOP标志置位,就会退出,然后调用do_exit

    2.9K20

    linux系统的进程管理

    Linux 在初始化的过程中会进行 0 号进程的创建,fork main.c sched.c—>sched_init—>gdt linux系统级别 GDT sched_init(...内核完全注释:基于0.11内核(修正版V3.0).pdf P281~P302 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8 四、进程的退出 linux...内核代码中以 syscall_、do_xxx 开头的基本上都是中断调用的函数 内核的销毁 exit 是销毁函数 ------> 一个系统调用 ------> do_exit 首先该函数会释放进程的代码段和数据段占用的内存...= send_sig(sig,*p,0)) retval = err; static void tell_father(int pid) 子进程向父进程发送SIGCHLD信号 int do_exit...内核完全注释:基于0.11内核(修正版V3.0).pdf P319~P325 链接:Linux内核完全注释:基于0.11内核(修正版V3.0).pdf 提取码:ygz8

    67010
    领券