![为什么 PID 1 的 CMD 值会根据传递给 ps 的标志而不同?](https://linux22.com/image/1621587/%E4%B8%BA%E4%BB%80%E4%B9%88%20PID%201%20%E7%9A%84%20CMD%20%E5%80%BC%E4%BC%9A%E6%A0%B9%E6%8D%AE%E4%BC%A0%E9%80%92%E7%BB%99%20ps%20%E7%9A%84%E6%A0%87%E5%BF%97%E8%80%8C%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
ps -ef | grep -E 'PID|init'
并为ps 输出的列ps -p 1
报告不同的字符串。为什么一个是,另一个是?我本来希望只看到。我正在运行 Ubuntu 18.04。CMD
systemd
/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 的输出或完全不同的东西。)