LINUX PID 1和SYSTEMD 专题

简介:   Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。

 

 

Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2)

idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_thread产生的进程。


各个进程的主要职责:

* idle进程(PID = 0,swapper,也叫idle)由系统自动创建, 运行在内核态 ,创建了第一个用户进程(init进程(PID = 1) /sbin/init)和通过kernel_thread创建第一个内核进程kthreadd(PID = 2) 之后idle进程(PID = 0)进入idle状态,
当没有进程可以被调度的时候运行该进程,不做具体的事情。即 完成加载系统后,演变为进程调度、交换。

*init进程完成系统的初始化. 是系统中所有其它用户进程的祖先进程。主要作用是处理僵尸进程。当某个父进程比子进程提前消亡时,父进程会给子进程重新寻找“养父进程”,一般就是进程1,由进程1负责处理该子进程的消亡。
   首先Linux内核启动,然后在用户空间中启动init进程,再启动其他系统进程。在系统启动完成完成后,init将变为守护进程监视系统其他进程。

*kthreadd进程由idle通过kernel_thread创建,并始终运行在内核空间, 负责所有内核线程的调度和管理 
它的任务就是管理和调度其他内核线程kernel_thread, 会循环执行一个kthreadd的函数,该函数的作用就是运行kthread_create_list全局链表中维护的kthread, 当我们调用kernel_thread创建的内核线程会被加入到此链表中,因此所有的内核线程都是直接或者间接的以kthreadd为父进程

 

 

 

进程之间的关系:父子关系、兄弟关系
task_struct的 real_parent成员指向父进程,
parent成员指向“养父进程”;
children成员表示该进程的子进程链表;
sibling成员表示该进程的兄弟进程链表。

 

要说清

相关文章
|
4月前
|
存储 缓存 Linux
哇~~真的是你呀!今天是LInux安装方法和systemd管理机制。
Linux服务安装和systemd管理机制是Linux操作系统中重要的服务管理机制。systemd是Linux下一种基本的系统服务管理器,负责管理Linux中的各种服务,如进程管理、启动和停止服务、日志记录、挂载文件系统等等。在systemd中,每个服务都以一个Unit的形式存在,Unit定义了该服务相关的一些属性,如服务名称、启动脚本的路径、依赖关系等。
82 0
哇~~真的是你呀!今天是LInux安装方法和systemd管理机制。
|
7月前
|
Linux 测试技术 开发工具
Linux的进程pid编号极限
整理本文,起源是看到知乎上的一个问题,为什么Linux的进程pid编号极限最大值( process pid max)是131070?
123 0
|
存储 监控 安全
深度剖析Linux进程的内部机制:一探/proc/pid的奥秘
深度剖析Linux进程的内部机制:一探/proc/pid的奥秘
83 0
|
2月前
|
存储 监控 Ubuntu
揭秘 systemd:释放 Linux 服务管理的力量【systemd 一】
揭秘 systemd:释放 Linux 服务管理的力量【systemd 一】
46 0
|
2月前
|
运维 网络协议 Linux
Linux 这50个 systemd 命令值得每位Linux运维工程师收藏!
Linux 这50个 systemd 命令值得每位Linux运维工程师收藏!
443 0
Linux 这50个 systemd 命令值得每位Linux运维工程师收藏!
|
3月前
|
算法 Linux Shell
【Linux】systemv init和systemd的区别
【Linux】systemv init和systemd的区别
38 0
|
5月前
|
关系型数据库 MySQL Linux
Linux下MySQL起动报错The server quit without updating PID file
Linux下MySQL起动报错The server quit without updating PID file
|
6月前
|
存储 Cloud Native Java
Linux下systemd深入指南:如何优化Java服务管理与开机自启配置
Linux下systemd深入指南:如何优化Java服务管理与开机自启配置
134 0
|
6月前
|
存储 Linux 虚拟化
Linux6.1中为什么用Radix树替换位图(bitmap)来管理进程pid
在过去的几十年中,Linux内核为了有效地管理进程,采用了位图(bitmap)数据结构来记录和跟踪进程的PID。我们知道Linux支持的最大进程数量为65535个,那么用位图来表示的话只需要16位bit就够了,这大大节约了内存空间,随着系统规模的扩大和复杂性增加,尤其是云计算、容器等新兴虚拟化技术大爆发的时代中,操作系统经常会在短时间内快速创建或者销毁大量进程,在这种场景下位图的全面查找时性能问题就逐渐暴露出来了。为了解决这些问题,Linux内核逐渐采用radix树(radix-tree)来替代位图,对进程PID进行管理,这个替换的思路就是用空间换时间。
|
7月前
|
Linux
17.1.2 【Linux】systemd使用的unit分类
17.1.2 【Linux】systemd使用的unit分类
73 0