gnome-control-center
当我从搜索栏调用
操作系统运行的真正命令可以在以下位置找到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 时,系统通常按如下方式启动:
- 引导加载程序加载内核和初始 RAM 磁盘
- 内核将 initrd 转换为“普通” RAM 磁盘,并释放 initrd 使用的内存
- 如果根设备不是 /dev/ram0,则遵循旧的(已弃用的)change_root 程序。请参阅下面的“过时的根更改机制”部分。
- 根设备已安装。如果是 /dev/ram0,则 initrd 映像将作为 root 安装
- /sbin/init 被执行(这可以是任何有效的可执行文件,包括 shell 脚本;它以 uid 0 运行,基本上可以完成 init 可以做的所有事情)。
- init 挂载“真实”的根文件系统
- init 使用 pivot_root 系统调用将根文件系统放置在根目录中
- init 在新的根文件系统上执行 /sbin/init,执行通常的启动顺序
- initrd 文件系统已被删除
还要注意,这?
表明它是一个守护进程。引用daemon(7) 手册页:
守护进程是在后台运行并监督系统或为其他进程提供功能的服务进程。