pstree -a 选项中的命令行参数是什么意思

pstree -a 选项中的命令行参数是什么意思

阅读 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列出。它不关心“参数”是否以 开头或它们代表什么。-aModemManager --filter-policy=strict-a-


有时程序会在文档中区分“选项”、“标志”、“参数”甚至“命令”,但对系统来说,它们都只是参数。程序会将它们全部一起输入,并自行决定如何处理它们,以及哪些适合每个类别。它可以帮助人们思考他们正在做什么,但它纯粹是提供信息,而不是强制执行。因为pstree必须显示每一个程序,它无法知道他们如何思考他们的命令行并且必须非常通用。

本质上,命令行的结构是

command-name argument-1 argument-2 argument-3...

这些参数可以是-x子命令或路径名,在command-name看到它们并决定做什么之前,它们都是相同的。pstree以原始形式查看它们,并在您要求时将它们报告给您。

相关内容