Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I am looking for a single line that does return the pid of a running process.

Currently I have:

ps -A -o pid,cmd|grep xxx|head -n 1

And this returns the fist pid, command. I need only the first number from the output and ignore the rest. I suppose sed or awk would help here but my experience with them is limited.

Also, this has another problem, it will return the pid of grep if the xxx is not running.

It's really important to have a single line, as I want to reuse the output for doing something else, like killing that process.

share|improve this question

migrated from Sep 30 '12 at 8:24

This question came from our site for professional and enthusiast programmers.

pipe it through head and specify the line to return with -n 1? – Mike McMahon May 23 '12 at 17:31

If you just want the pid of the process you can make use of pgrep if available. pgrep <command> will return the pid of the command (or list of pids in case there are more than one instance of the command running, in which case you can make use of head or other appropriate commands)
Hope this helps!

share|improve this answer
+1 My usual use of pgrep: kill `pgrep xxx` – Steve May 23 '12 at 22:34
@steve: Perhaps you should look at pkill. – Dennis Williamson May 24 '12 at 1:17

Just one more command needed; you want only the first field from a line of space-separated values:

ps -A -o pid,cmd|grep xxx | grep -v grep |head -n 1 | awk '{print $1}'

Well, two. I added another grep to remove grep itself from the output.

share|improve this answer

Just use pgrep, it's much more straight forward

pgrep -o -x xxxx

The above selects the oldest process with the exact name

share|improve this answer
And since OP wants to use the command to kill the process, pkill (with the same args) would be the most direct choice. – bstpierre Sep 30 '12 at 1:59

Running on Cygwin so I can't use -A and -o, but something like this:

$ ps
     4580       1    4580       4580  ?       55573   May 21 /usr/bin/mintty
     5808    7072    5808       7644  pty3    55573 13:35:31 /usr/bin/ps
     7072    5832    7072       6424  pty3    55573   May 21 /usr/bin/bash

$ ps | grep '/usr/bin/mintty' | head -n 1 | awk '{print $1}'
share|improve this answer

you can do something like

ps -A -o cmd,pid | egrep "^xxx " | head -n 1 | sed -r -e 's/.* ([0-9]+)$/\1/'

then xxx has to be process name and it will not pick up grep because of the anchor ^

share|improve this answer

pidof xxx will suffice on linux

share|improve this answer

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .