Назад | Перейти на главную страницу

Как отслеживать pid каждой команды в сценарии оболочки?

В моей ситуации у меня есть один сценарий оболочки, в котором в фоновом режиме запускаются rsync и tar. Rsync используется для передачи файлов, а tar выполняет сжатие после завершения rsync. Моя проблема в том, как отслеживать pid rsync и заставлять команду tar запускаться, когда pid rsync больше не существует.

Сценарий оболочки может выглядеть так:

rsync data.log B/ &
tar data.tar.gz B/data.log &

это довольно просто: вам нужно сохранить переменную pid с помощью:

PID_1=$!

Чтобы проверить id, прогресс все еще идет, просто введите kill -0, например:

while True:
     if [ 'kill -0 $PID_1' -eq 0 ]; then
         echo Process still running
     else
         echo process done

(Если код не работает должным образом - мне очень жаль. Я писал в постели :-))

Для объяснения: «kill -0 $ PID_1» вернет 0 или, очевидно, 1. Если его 0, процесс запущен, а если его один, процесс завершен. Вы можете проверить код возврата с помощью «echo $?».

Надеюсь, это поможет.