开发者

shell command to find a process id and attach to it?

开发者 https://www.devze.com 2022-12-30 01:52 出处:网络
I want to attach to a running process using \'ddd\', what I manually do is: # ps -ax | grep PROCESS_NAME

I want to attach to a running process using 'ddd', what I manually do is:

# ps -ax | grep PROCESS_NAME

Then I get a list and the pid, then I type:

# ddd PROCESS_NAME THE_PI开发者_运维问答D

Is there is a way to type just one command directly?

Remark: When I type ps -ax | grep PROCESS_NAME, grep will match both the process and grep command line itself.


There is an easy way to get rid of the grep process:

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

(as long as the process you're trying to find doesn't include the string " grep ").

So something like this should work in a script (again, assuming there's only one copy running):

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

If you call your script dddproc, you can call it with:

dddproc myprogramname

Although I'd add some sanity checks such as detecting if there's zero or more than one process returned from ps and ensuring the user supplies an argument.


As separate commands:

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

In one line:

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


ddd <process_name> `pgrep <process_name>`


you can use pggrep to find the process


You can use awk to both filter and get the column you want. The "exit" limits the ps results to the first hit.

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

ddd_grep PROCESS_NAME

You may have to adjust the columns for your ps output. Also you can change the == to ~ for regex matching.


Do this way -

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

精彩评论

暂无评论...
验证码 换一张
取 消