阅读进程周围的括号是什么意思?据我所知,可执行文件名称已打印。
Linux附注手册页:
有时进程参数不可用;发生这种情况时,ps 将在括号中打印可执行文件名称。
然而ps -Awwo pid,comm,args
我得到:
PID COMMAND COMMAND
1 init init [2]
这是什么意思? “可执行文件名称”应该是init
or吗[2]
?
我想可执行文件当然是init
- 什么是[2]
?为什么会被打印出来?
(另外,我真的不明白为什么它不能显示完整路径,如果它知道可执行文件名称。)
答案1
如果涉及的每个人都遵循默认约定,则输出中的列和列的comm
第一个单词都会显示可执行程序的名称。然而,由于各种原因,可能会出现差异。args
ps
当程序启动时,args
列中显示的命令名称由执行该程序的父程序选择并作为参数 ( argv[0]
) 传递。按照惯例,父级选择可执行文件的基本名称(即不带目录部分的可执行文件的路径),但这不是强制的。一旦程序运行,它就可以覆盖该字符串。
Init(至少是传统的 Linux SysVinit)会覆盖它argv[0]
以指示当前运行级别。
在 Linux 上,该comm
列最初由内核填充为可执行文件基本名称的前 16 个字符。该过程可以改变内容prctl
系统调用。
如果可执行文件被重命名或删除,则comm
列和args
列都不会反映这一点。
ps
不显示可执行文件的路径,这不在其工作描述中。lsof
可以告诉你lsof -a -p 1 -d txt
。
在 Linux 上,您可以在以下文件中看到此信息:/proc/PID/
- (括号中的第二个字段)和(字段)
comm
中的进程名称(字段) 。/proc/1/stat
/proc/1/status
Name
- 通过 的可执行文件的路径
/proc/1/exe
。 - 中的参数(以 开头
argv[0]
)/proc/1/cmdline
(参数由空字节分隔)。