shell命令找到进程ID并附加到它?

时间:2010-05-14 10:21:21

标签: bash domain-driven-design grep

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

# ps -ax | grep PROCESS_NAME

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

# ddd PROCESS_NAME THE_PID

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

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

6 个答案:

答案 0 :(得分:3)

有一种简单的方法可以摆脱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返回零个或多个进程并确保用户提供参数。

答案 1 :(得分:1)

作为单独的命令:

% 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}

答案 2 :(得分:0)

这样做 -

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

答案 3 :(得分:0)

ddd <process_name> `pgrep <process_name>`

答案 4 :(得分:0)

您可以使用pggrep查找进程

答案 5 :(得分:0)

您可以使用awk进行过滤并获取所需的列。 “退出”将ps结果限制为第一次击中。

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

ddd_grep PROCESS_NAME

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