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

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

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

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

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

решение1

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

PID_1=$!

Чтобы проверить идентификатор процесса, просто выполните команду 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 $?'.

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

Связанный контент