【问题标题】:shell command to find a process id and attach to it?shell命令查找进程ID并附加到它?
【发布时间】:2011-02-19 11:21:58
【问题描述】:

我想使用 'ddd' 附加到正在运行的进程,我手动执行的是:

# ps -ax | grep PROCESS_NAME

然后我得到一个列表和 pid,然后我输入:

# ddd PROCESS_NAME THE_PID

有没有办法直接输入一个命令?

备注:当我输入ps -ax | grep PROCESS_NAME时,grep会同时匹配进程和grep命令行本身。

【问题讨论】:

  • 您可以使用grep [P]ROCESS_NAME 消除grep -v grep - 在进程名称的第一个字符周围加上方括号会使shell 将其解释为一个字符的列表之一(“P”在此case) 但grepps 的输出中看到文字括号-P-bracket,因此不匹配。

标签: bash domain-driven-design grep


【解决方案1】:

有一个简单的方法可以摆脱 grep 进程:

ps -ax | grep PROCESS_NAME | grep -v ' grep '

(只要您尝试查找的进程不包含字符串" grep ")。

所以这样的事情应该在脚本中工作(再次假设只有一个副本在运行):

pid=$(ps -ax | grep $1 | grep -v ' grep ' | awk '{print $1}')
ddd $1 ${pid}

如果你调用你的脚本dddproc,你可以调用它:

dddproc myprogramname

虽然我会添加一些健全性检查,例如检测从ps 返回的进程是否为零或多个,并确保用户提供参数。

【讨论】:

  • 你的答案是成功的一半。我期待一些只会产生 PID 的 grep 命令,所以我可以执行以下操作:ddd PROCESS_NAME $(THE_MAGIC_GREP_COMMAND)
  • @lallous,grep | grep -v | awk 将为您提供进程的 PID。 grep -v grep 删除您抱怨的(grep 进程)行,而 `awk '{print $1}' 只为您提供 PID。
【解决方案2】:

作为单独的命令:

% PID=`ps -ax | grep ${PROCESS_NAME} | grep -v grep | cut -d ' ' -f 1-2`
% ddd ${PROCESS_NAME} ${PID}

一行:

% PID=`ps -ax | grep ${PROCESS_NAME} | grep -v grep | cut -d ' ' -f 1-2` && ddd ${PROCESS_NAME} ${PID}

【讨论】:

  • 我正在使用 Ubuntu 10 的 bash,这很有效: $ ddd ${PROCESS_NAME} $(ps -ax | grep ${PROCESS_NAME} | grep -v grep | cut -d ' ' -f 1 ) 谢谢!
  • @lallous:是的,这看起来是等价的 - TMTOWTDI,正如他们所说... ;-)
【解决方案3】:

这样做 -

ddd PROCESS_NAME \`ps -ax | grep PROCESS_NAME | grep -v grep | awk '{print $1}'\`

【讨论】:

    【解决方案4】:
    ddd <process_name> `pgrep <process_name>`
    

    【讨论】:

      【解决方案5】:

      你可以使用pggrep来查找进程

      【讨论】:

        【解决方案6】:

        您可以使用 awk 来过滤和获取您想要的列。 “退出”将 ps 结果限制为第一次命中。

        function ddd_grep() {
          ddd $(ps -ax | awk -v p="$1" '$4 == p { print $1; exit 0; }');
        }
        
        ddd_grep PROCESS_NAME
        

        您可能需要调整 ps 输出的列。您也可以将== 更改为~ 以进行正则表达式匹配。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-03
          • 2015-12-24
          • 2020-01-20
          • 2011-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多