![pstree -a 选项中的命令行参数是什么意思](https://linux22.com/image/1011616/pstree%20-a%20%E9%80%89%E9%A1%B9%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D.png)
阅读 pstree 手册时
-a Show command line arguments. If the command line of a process is swapped out, that process is
shown in parentheses. -a implicitly disables compaction for processes but not threads.
我对“命令行参数”非常困惑
比较输出
me@alpha:~$ pstree |head -5
systemd-+-ModemManager---2*[{ModemManager}]
|-NetworkManager-+-dhclient
| `-2*[{NetworkManager}]
|-accounts-daemon---2*[{accounts-daemon}]
|-acpid
me@alpha:~$ pstree -a | head -5
systemd splash
|-ModemManager --filter-policy=strict
| `-2*[{ModemManager}]
|-NetworkManager --no-daemon
| |-dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/dhclient-wlp3s0.pid -lf...
命令行由功能、选项和参数组成
说 -a 显示命令行参数,暗示其他的只显示功能和选项,但事实并非如此。
这里的命令行参数是什么意思?
答案1
命令行参数一般是指运行程序名称后面的所有参数。例如,在您的命令中pstree | head -5
,有一个参数head
是-5
。
在pstree
输出中,树由 pid(进程 ID)或 init 的根以及子线程树组成。例如,在您的输出中,NetworkManager 是一个运行一个dhclient
和两个NetworkManager
线程的父进程。
添加该-a
标志还会打印启动每个进程或线程时使用的参数。例如,在您的输出中,我们可以看到 是NetworkManager
用一个参数启动的--no-daemon
,而 是dhclient
用多个参数启动的。
这就是手册页中“显示命令行参数”的全部含义。
答案2
争论就是不是命令名称本身。例如,
dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/dhclient-wlp3s0.pid -lf
论点都是
-d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /run/dhclient-wlp3s0.pid -lf
argv
这些是程序启动时提供给C 数组中位置 1 及以后的值,或者sys.argv[1..]
在 Python 中。
该pstree
手册的意思是没有-a
它只列出每个程序的名称而不是命令行中给出的任何其他部分。这就是您的两个示例所显示的:第一个版本中没有,但在 版本中ModemManager
列出。它不关心“参数”是否以 开头或它们代表什么。-a
ModemManager --filter-policy=strict
-a
-
有时程序会在文档中区分“选项”、“标志”、“参数”甚至“命令”,但对系统来说,它们都只是参数。程序会将它们全部一起输入,并自行决定如何处理它们,以及哪些适合每个类别。它可以帮助人们思考他们正在做什么,但它纯粹是提供信息,而不是强制执行。因为pstree
必须显示每一个程序,它无法知道他们如何思考他们的命令行并且必须非常通用。
本质上,命令行的结构是
command-name argument-1 argument-2 argument-3...
这些参数可以是-x
子命令或路径名,在command-name
看到它们并决定做什么之前,它们都是相同的。pstree
以原始形式查看它们,并在您要求时将它们报告给您。