Sign up ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It's 100% free, no registration required.

I want to have a shell script like this:

my-app &
echo $my-app-pid

But I do not know how the get the pid of the just executed command.

I know I can just use the jobs -p my-app command to grep the pid. But if I want to execute the shell multiple times, this method will not work. Because the jobspec is ambiguous.

share|improve this question

2 Answers 2

up vote 98 down vote accepted

It is in the ! shell variable:

my-app &
echo $!
share|improve this answer
It is printing pid as for eg. [1] 893 . I want only number. – user3153014 Sep 4 '14 at 11:47
It should be noted that this stands for programs started in the background. If no background processes have been started the parameter is not set. – ramrunner Nov 17 '14 at 21:52
Another worthy solution is suggested in (a comment to an answer to) How to get pid of just started process: oh, and the "oneliner": /bin/sh -c 'echo $$>/tmp/ && exec program args' & – sysfault Nov 24 '10 at 14:28 – imz -- Ivan Zakharyaschev Jun 2 at 14:11
@user3153014 String s like "[2] 2625" are printed by shell after starting background task. This is not related to output of echo $! – Petr Gladkikh Jul 26 at 5:21

Try something like this:

 ps ef | grep [m]y-app | awk '{print $2}'

Placing the first letter of your process between "[]" makes sure you do not get the "grep" process in your list. If needed you can also add a grep on your username.

share|improve this answer
That's very fragile at best and doesn't work if my-app is executed more than once - davidshen84 specifically worries about that cas. – Mat Jan 30 '12 at 12:10
If you even go this route, you should use pgrep instead. – Willem Jan 19 at 12:41

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.