【问题标题】:xargs not working with lsofxargs 不适用于 lsof
【发布时间】:2013-09-20 00:05:14
【问题描述】:

当我运行pgrep vim | xargs echo 时,它会打印出93868 91234

当我运行 lsof -p 91234 时,它会打印:

COMMAND   PID USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
vim     91234 rose  cwd    DIR    1,2      1326 1186863 /Users/rose/spotapi/spotapi/models
vim     91234 rose  txt    REG    1,2   1629296   12231 /usr/bin/vim
vim     91234 rose  txt    REG    1,2   2704416  294199 /System/Library/Frameworks/Python.framework/Versions/2.7/Python

为什么会这样

pgrep vim | xargs lsof -p 

打印

lsof: status error on 91234: No such file or directory

我在 Mac OS 上运行。

【问题讨论】:

  • 无法在 linux 上复制此错误,可能是 this issue?或者lsof -c 有帮助吗?

标签: macos xargs lsof


【解决方案1】:

我在我的 Slackware 安装中看到了这一点。如果您运行lsof -p 93868 91234,您将看到问题。原因是xargs 尽可能将所有参数推到一个命令行上。您可以使用-n 选项来指定参数的最大数量。

pgrep vim | xargs -n1 lsof -p

【讨论】:

    【解决方案2】:

    或者,您可以通过用逗号替换空格来提供多个 PID:

    lsof -p `pgrep vim | xargs echo | sed -re 's/ /,/g'`
    

    在上面的示例中,我使用 xargs 将所有 pid 传递给 echo 以将它们放在一行中,然后用逗号替换空格。针对 lsof 执行的命令是:

    lsof -p 1111,2222
    

    一种更简单的方法(如果您知道进程名称,例如 vim)并且不需要 pgrep:

    lsof -p `pidof vim | sed -re 's/ /,/g'`
    

    不是 100% 确定它在 osx 中的兼容性和可用性,这是一个 Fedora / Ubuntu。

    【讨论】:

      猜你喜欢
      • 2013-07-23
      • 2015-06-19
      • 2021-08-17
      • 1970-01-01
      • 2020-01-05
      • 2020-01-25
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多