为什么“top”无法通过“xargs”运行?

为什么“top”无法通过“xargs”运行?

top我正在尝试使用-p选项和多个 PID来运行xargs。但是,top无法运行并出现错误top: failed tty get

$ pgrep gvfs | paste -s -d ',' | xargs -t top -p
top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744
top: failed tty get

我使用-t选项来xargs查看即将执行的完整命令。看起来不错,我可以手动成功运行它:

top -p 1598,1605,1623,1629,1635,1639,1645,1932,2744

但是,它不与 一起运行xargs。这是为什么?

答案1

事实证明,--open-tty对于xargs交互式应用程序(例如top.从男人xargs

   -o, --open-tty
          Reopen stdin as /dev/tty in the child process before
          executing the command.  This is useful if you want xargs
          to run an interactive application.

运行的命令top应该是:

pgrep gvfs | paste -s -d ',' | xargs --open-tty top -p

答案2

top是一个交互式程序,例如您可以键入i来切换显示空闲进程。虽然它可以安排在实践中读取,但/dev/tty它期望 stdin 连接到终端。

对于您的示例,只需使用命令替换而不是xargs,例如

top -p "$(pgrep gvfs | paste -s -d ',')"

shell 首先运行 pgrep 和 Paste,获取这些命令的输出,然后使用该输出调用 top。

相关内容