Reputation: 309
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
Reputation: 2156
ps --pid $pid &>/dev/null
returns 0 if it exists, 1 otherwise
Upvotes: 8
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
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
Reputation: 341003
You might look for the presence of /proc/YOUR_PID
directory.
Upvotes: 10
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