Подтвердить что ты не робот

BASH - Проверьте, существует ли PID

Я хочу приостановить выполнение моего BASH script до тех пор, пока процесс не будет закрыт (у меня есть PID, хранящийся в переменной). я думаю
while [ PID IS RUNNING]; do
sleep 500
done

Большинство примеров, которые я видел, используют /dev/null, которые, как представляется, требуют root. Есть ли способ сделать это, не требуя root?

Спасибо вам заблаговременно!

4b9b3361

Ответ 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, если он существует, в противном случае