名为“?”的终端是所有进程的祖母吗?

名为“?”的终端是所有进程的祖母吗?

gnome-control-center当我从搜索栏调用

在应用程序菜单中搜索“gnome-control”

操作系统运行的真正命令可以在以下位置找到ps

me@alpha:~$ ps -ef | grep gnome-control-center 
me   13952  7293  0 12:20 tty2     00:00:00 gnome-control-center
me   15523  7835  0 12:27 pts/0    00:00:00 grep --color=auto gnome-control-center

表示操作系统打开一个终端tty2,输入命令gnome-control-center,然后按回车键。

当谈到 init 或 systemd 进程时

me@alpha:~$ ps -ef | head -5
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 10:34 ?        00:00:05 /sbin/init splash
root         2     0  0 10:34 ?        00:00:00 [kthreadd]
root         3     2  0 10:34 ?        00:00:00 [rcu_gp]
root         4     2  0 10:34 ?        00:00:00 [rcu_par_gp]

参考PID 1,其命令是/sbin/init splash

从哪里输入,,/sbin/init splash然后按 Enter?

tty?代表守护进程。

我这样理解是否正确:守护进程是由名为 的终端调用的,?并且这个终端是所有进程的祖母?

笔记:

感谢 Sergiy 关于内核的教程。

我从一本名为《Unix环境高级编程》的书上的一张图片直观地得到了这个想法。

该系统调用fork将产生一个可从 shell 或应用程序调用的新进程。

图表摘自书上

答案1

符号?表示没有tty与进程关联的设备。换句话说,没有实际或虚拟设备可供该进程写入信息。但是,该/sbin/init进程实际上是系统上所有进程的“祖母”,无论是直接还是间接。它来自哪里?Linux 内核启动它。内核可以说是所有进程的“祖母”。步骤描述如下 Linux 内核文档

手术

当使用 initrd 时,系统通常按如下方式启动:

  1. 引导加载程序加载内核和初始 RAM 磁盘
  2. 内核将 initrd 转换为“普通” RAM 磁盘,并释放 initrd 使用的内存
  3. 如果根设备不是 /dev/ram0,则遵循旧的(已弃用的)change_root 程序。请参阅下面的“过时的根更改机制”部分。
  4. 根设备已安装。如果是 /dev/ram0,则 initrd 映像将作为 root 安装
  5. /sbin/init 被执行(这可以是任何有效的可执行文件,包括 shell 脚本;它以 uid 0 运行,基本上可以完成 init 可以做的所有事情)。
  6. init 挂载“真实”的根文件系统
  7. init 使用 pivot_root 系统调用将根文件系统放置在根目录中
  8. init 在新的根文件系统上执行 /sbin/init,执行通常的启动顺序
  9. initrd 文件系统已被删除

还要注意,这?表明它是一个守护进程。引用daemon(7) 手册页

守护进程是在后台运行并监督系统或为其他进程提供功能的服务进程。

相关内容