【问题标题】:Pipes & xargs => top [closed]管道和 xargs => 顶部 [关闭]
【发布时间】:2013-04-24 19:36:34
【问题描述】:

我正在尝试使用管道和 xargs 从特定 pid 开始,但我无法让它工作,我不知道为什么:

ps aux|grep ProgramName|awk '{print $2}'|head -n1|xargs top -pid

如果我在 head -n1 之后停止,我会在屏幕上打印正确的 pid,并且手动将该 pid 添加到命令 top -pid XXX 也可以,但是正在运行整行作为一个命令只是不返回顶部屏幕。

我在这里做错了什么?

编辑:是的,“-pid”确实是正确的(进一步检查远程 shell 发现它实际上是基于 Mac OS 的系统,而不是 Linux 系统)

【问题讨论】:

  • 从 -p 标志中删除“id”,然后重试。

标签: macos xargs


【解决方案1】:

我在这里做错了什么?

几件事:

  1. 您在同一管道中使用 grepawk。由于awk 进行模式匹配,因此没有理由将grep 用作单独的进程。

  2. 您在同一管道中使用 awkhead。由于awk可以控制打印的项目数,所以没有必要使用head

  3. 您的grep 命令将找到指定的程序,grep 程序。

  4. 您正在使用 xargs 提供单个命令行参数。反引号或$() 是更好的选择。

  5. top 采用 -p 开关,而不是 -pid 开关。 (至少在我的电脑上。)

全部加起来,试试:

$ top -p $(ps aux | awk '/ProgramName/ && ! /awk/ { print $2; exit; }')

【讨论】:

  • mh,这不起作用。 “-pid”确实是我的首选,而不是“-p”
  • 这很有趣。你使用什么 Linux 发行版,top 的版本是什么(运行top -v)?
  • 如果你指定-pid而不是-p,但是使用我建议的命令,它可以工作吗?
  • 不,整个命令都不起作用(运行它会为我提供一个输入刻度“>”),但我刚刚检查过(远程 shell),它实际上是一个基于 Mac OS 的系统(不是 Linx 作为我以为)。这将解释 pid/p 的差异。也没有可用的版本。
  • 抱歉,括号不匹配。查看我的编辑。
【解决方案2】:

你的问题是

  1. 顶部的参数应该是“-p”而不是“-pid”
  2. xargs 用于运行非交互式程序

试试这个:

top -p "$(pgrep ProgramName | head -n 1)"

top -p "$(pgrep --oldest ProgramName)"

top -p "$(pgrep --newest ProgramName)"

【讨论】:

  • +1 表示pgrep。我以前从未见过。
  • 我的 top 将“-pid”作为选项,而不是“-p”,而且我的系统上没有“pgrep”,但无论如何感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-15
  • 2016-06-05
相关资源
最近更新 更多