为什么 PID 1 的 CMD 值会根据传递给 ps 的标志而不同?

为什么 PID 1 的 CMD 值会根据传递给 ps 的标志而不同?

ps -ef | grep -E 'PID|init'并为ps 输出的列ps -p 1报告不同的字符串。为什么一个是,另一个是?我本来希望只看到。我正在运行 Ubuntu 18.04。CMDsystemd/sbin/init/sbin/init

user@host:~$ ps -ef | grep -E 'PID|init' --color=no
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 15:07 ?        00:00:13 /sbin/init splash
bag      22919  8273  0 19:52 pts/1    00:00:00 grep --color=auto -E PID|init --color=no
user@host:~$ ps -p 1
  PID TTY          TIME CMD
    1 ?        00:00:13 systemd

答案1

有两个“CMD”字段:一个取自实际命令行,又名argv[0],另一个单独的字段名为comm

通常该comm字段包含程序的文件名(最多 15 个字节),但 systemd 会故意覆盖该值,以便更容易确定哪个 init 系统当前处于活动状态。

在预定义输出中,两个字段具有相同的列名。但是,ps -p常规时显示 comm 字段ps,而常规时ps -f显示 argv[] 或命令行。

(Linux“ps”是 BSD“ps”和 SysV“ps”的不正当组合——根据选项的组合,您可能会得到类似 SysV 的输出或类似 BSD 的输出或完全不同的东西。)

相关内容