n61*_*007 5 ps executable init sysvinit command
阅读进程周围的括号是什么意思?我知道打印了可执行文件名。
Linux ps手册页:
有时进程参数将不可用;发生这种情况时, ps 将改为在括号中打印可执行文件名称。
但是ps -Awwo pid,comm,args
我得到:
PID COMMAND COMMAND
1 init init [2]
Run Code Online (Sandbox Code Playgroud)
这是什么意思?“可执行名称”应该是init
还是[2]
?
我想可执行文件当然是init
- 什么是[2]
?为什么要打印?
(另外,如果它知道可执行文件名称,我真的不明白为什么它不能显示完整路径。)
如果涉及的每个人都遵循默认约定,则输出中的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
in /proc/1/stat
(括号中的第二个字段)和/proc/1/status
(Name
字段)中的进程名称(字段)。/proc/1/exe
.argv[0]
) in /proc/1/cmdline
(参数由空字节分隔)。