使用‘ps’的 init 进程名称输出不一致

使用‘ps’的 init 进程名称输出不一致

我在 Ubuntu 16.04 上,一直在遵循《Linux 圣经》(第 9 版)的“启动和停止”服务章节。我试图找出我拥有的 init 守护进程的类型(initsystemd),这需要我找到哪个进程的 PID 为 1。但是,根据我运行命令的方式,我得到了 2 个不同的结果...

webmaster@my-site:~$ ps -p1
  PID TTY          TIME CMD
    1 ?        00:00:29 systemd
webmaster@my-site:~$ ps -F -p1
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0  9420  5336   0 Feb23 ?        00:00:29 /sbin/init

systemd运行第一个命令后,它说的是 PID1,但/sbin/init运行第二个命令后,它说的是 PID1。

答案1

                        GRUB(GRand Unified Bootloader)
                                       |                                                          
                                       |
                                       |                                                  
                                       V
                                     Kernel
                                       |
                                Hardware check
                                       |
                            -----------------------
                            |init processes start |
                            -----------------------
                                      /|\
                                     / | \
                            SysVinit   |  systemd
                        init scripts   |
                                    Upstart

让我试着解释一下图表以上。现在在 Ubuntu 中,它以 开始SysVinit,然后是Upstart,最后是Systemd。这些中的每一个都将处理这个init过程开始一切关于 Linux 和 Ubuntu 的一般信息。

现在,Ubuntu 正在逐渐从Upstart和 转变为 和 ,它是Ubuntu Xenial 上的Systemd当前控制器。进程启动所有事物(或大多数事物,因为内核有自己的与 无关的进程),但处理或控制该进程的是、或 ,具体取决于您的 Ubuntu 版本。在您的情况下,它是较新的。但请记住,您还会看到旧系统的残余,其中、等命令仍然有效。initinitinitinitSysVinitUpstartSystemdSystemdinitctlservice

因此,为了使初始系统功能或服务正常运行,新版 Ubuntu 现在使用旧版的systemd替代品。但为了向后兼容,仍在后台运行。init daemoninit

根据man ps,传递-F标志会导致command arguments打印出来。因此,在这种情况下,命令如下所示:

ps -p 1

#Result
PID TTY          TIME CMD
1 ?        00:00:02 systemd

然后看到参数传递给该命令:

ps -F -p 1

#Result
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root         1     0  0 46414  6336   1 05:48 ?        00:00:02 /sbin/init splash

因此ps -p 1==> command,并且ps -F -p 1==> arguments passed。长话短说, Extra 完整格式,查看与或命令-F相关的更多信息。您看到的是Ubuntu Xenial 上运行的底层进程。请注意ps -p 1systemdinitsystemd时间:00:00:02,这对于的两种形式中的systemd和都是相同的。/sbin/initps

请看看这个并且您将看到为什么在使用选项/sbin/init时会出现。运行。-FSystemdPID 1 as /sbin/init

来源:

man ps

https://wiki.ubuntu.com/SystemdForUpstartUsers

答案2

对于 Ubuntu 16.04,默认init值为systemd

~$ ls -l /sbin/init
lrwxrwxrwx 1 root root 20 Oct  3 20:44 /sbin/init -> /lib/systemd/systemd

systemd是真正正在运行的。-F选项使ps打印用于启动它的确切命令行(包括参数)。

相关内容