我打开了一个终端,sudo su
并通过以 身份在后台运行 nano 编辑器nano&
。
我尝试在进程列表中找到新启动的 nano 进程。
为此,我输入了
ps aux|grep -i nano
-> 看到了新创建的 nano
但当我尝试使用 pstree 查看相同的 nano 进程时,它没有列出 nano。我使用了
pstree -p|grep -i nano
没有显示输出。
答案1
管道传输时似乎pstree
会截断长行,例如
# pstree -sp "$$"
systemd(1)───sddm(1007)───sddm-helper(1097)───lxqt-session(1114)───qterminal(1475)───bash(1478)───sudo(28929)───sudo(28930)───su(28931)───bash(28932)─┬─nano(28938)
└─pstree(29086)
但
# pstree -sp "$$" | cat
systemd(1)---sddm(1007)---sddm-helper(1097)---lxqt-session(1114)---qterminal(1475)---bash(1478)---sudo(28929)---sudo(28930)---su(28+
(注意,后面的所有内容sudo(28930)---su(28+
都被省略了)。
您可以通过-l
或--long
选项来防止这种情况发生,即
# pstree -lsp "$$" | grep -i nano
|-nano(28938)
或者通过不从 PID 1 启动来避免该问题 - 例如,从父 shell 的 PID 启动:
# pstree -p "$$" | grep -i nano
|-nano(28938)
或者(也许更好)避免 grepping pstree 输出(这实际上是供人眼查看的),pgrep
而是使用:
# pgrep -af nano
28938 nano
答案2
pstree
通过管道...检查一下:
pstree -p | tee
可能不会显示完整的命令/命令行参数,这取决于进程在树的右侧有多远...它可能会显示部分命令,后跟一个加号,表示输出被缩短,而不是--nan+
或--nano
甚至可能不会显示,如果该进程距离进程树的右侧足够远。
因此,如果您需要显示命令行参数,请使用以下选项-a
:
pstree -ap | grep -i nano
虽然grep
比起“ps
pstree
树“部分将丢失...如果你必须使用pstree
with,grep
那么至少使用grep
's-B
和-A
选项在匹配之前和之后显示几行,以便“树“至少部分显示如下:
pstree -ap | grep -B 5 -A 5 -i nano