进程与硬件信息探索
进程树
在Linux系统中,shell对其所启动的命令进程拥有一定控制权。当按下 Ctrl + C
时,shell能知晓命令的进程ID(PID)并发送信号来终止进程。实际上,从shell启动的所有进程都会成为该shell进程的子进程。而shell本身也是一个子进程,在Linux桌面环境下,它是终端模拟器的子进程;通过SSH远程连接时,它是OpenSSH守护进程的子进程。
所有进程都有一个共同的父进程,所有正在运行的进程关系构成了一棵以PID = 1为根的树。出于历史原因,这个所有进程的父进程常被称为 init
进程。在通用Linux发行版中,很长一段时间里该进程是 System V init
。不过,PID = 1的进程可以是任何可执行文件。在启动Linux系统时,可以指定将哪个可执行文件作为PID = 1加载。例如,在GRUB命令行中添加 init=/bin/bash
可使系统以救援模式启动,但最好使用发行版启动菜单项中的内置救援选项,因为它可能会传递额外的有用参数。
如今,大多数现代发行版使用 systemd
作为服务管理器,也有一些选择其他替代方案,如 OpenRC
。 init
进程是唯一由内核直接启动的进程,其他所有进程,如登录管理器、SSH守护进程、Web服务器、数据库系统等,都是由 init
进程启动的。可以使用 pstree
命令查看完整的进程树,示例如下: