我想使用'ddd'附加到正在运行的进程,我手动执行的操作是:
# ps -ax | grep PROCESS_NAME
然后我得到一个列表和pid,然后输入:
# ddd PROCESS_NAME THE_PID
是否有办法直接输入一个命令?
备注:当我输入ps -ax | grep PROCESS_NAME
时,grep将匹配进程和grep
命令行本身。
答案 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输出的列。您也可以将==
更改为~
以进行正则表达式匹配。