JohnP
JohnP

Reputation: 309

Check if PID exists in Bash

I want to stall the execution of my BASH script until a process is closed (I have the PID stored in a variable). I'm thinking

while [PID IS RUNNING]; do
sleep 500
done

Most of the examples I have seen use /dev/null which seems to require root. Is there a way to do this without requiring root?

Thank you very much in advance!

Upvotes: 30

Views: 62601

Answers (5)

Matt Kneiser
Matt Kneiser

Reputation: 2156

ps --pid $pid &>/dev/null

returns 0 if it exists, 1 otherwise

Upvotes: 8

sligocki
sligocki

Reputation: 6397

It seems like you want

wait $pid

which will return when $pid finishes.

Otherwise you can use

ps -p $pid

to check if the process is still alive (this is more effective than kill -0 $pid because it will work even if you don't own the pid).

Upvotes: 26

qdiesel
qdiesel

Reputation: 411

I always use the following tail -f /dev/null --pid $PID. It doesn't require explicit loop and isn't limited to your shell's children pids only.

Upvotes: 3

Tomasz Nurkiewicz
Tomasz Nurkiewicz

Reputation: 341003

You might look for the presence of /proc/YOUR_PID directory.

Upvotes: 10

moonshadow
moonshadow

Reputation: 89185

kill -s 0 $pid will return success if $pid is running, failure otherwise, without actually sending a signal to the process, so you can use that in your if statement directly.

wait $pid will wait on that process, replacing your whole loop.

Upvotes: 40

Related Questions