pstree 不显示每个进程

pstree 不显示每个进程

我打开了一个终端,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比起“pspstree“部分将丢失...如果你必须使用pstreewith,grep那么至少使用grep's-B-A选项在匹配之前和之后显示几行,以便““至少部分显示如下:

pstree -ap | grep -B 5 -A 5 -i nano

相关内容