BASH - Проверьте, существует ли PID
Я хочу приостановить выполнение моего BASH script до тех пор, пока процесс не будет закрыт (у меня есть PID, хранящийся в переменной). я думаю
while [ PID IS RUNNING]; do
sleep 500
done
Большинство примеров, которые я видел, используют /dev/null, которые, как представляется, требуют root. Есть ли способ сделать это, не требуя root?
Спасибо вам заблаговременно!
Ответы
Ответ 1
kill -s 0 $pid
вернет успех, если $pid
запущен, в противном случае произойдет отказ, фактически не отправив сигнал процессу, поэтому вы можете напрямую использовать его в своем выражении if
.
wait $pid
будет ждать этого процесса, заменив весь цикл.
Ответ 2
Кажется, что вы хотите
wait $pid
который вернется, когда заканчивается $pid
.
В противном случае вы можете использовать
ps -p $pid
чтобы проверить, жив ли процесс (это более эффективно, чем kill -0 $pid
, потому что он будет работать, даже если вы не являетесь владельцем pid).
Ответ 3
Вы можете найти наличие каталога /proc/YOUR_PID
.
Ответ 4
Я всегда использую следующие
tail -f /dev/null --pid $PID
. Он не требует явного цикла и не ограничивается только вашими дочерними элементами оболочки.
Ответ 5
ps --pid $pid &>/dev/null
возвращает 0, если он существует, в противном случае