Автор Тема: Как получить код возврвта программы, запущенной в фоновом режиме из shell скрипт  (Прочитано 2145 раз)

Оффлайн goshka

  • Завсегдатай
  • *
  • Сообщений: 114
    • Email
Как получить код возврвта программы, запущенной в фоновом режиме из shell скрипта?

Допустим, запускаем shell script:
tar -xzvf &
дожидаемся окончания его работы (а пока он работает рисуем progress_bar)

Но вот переменная $? после завершения tar всегда == 0 и не зависит от кода завершения tar  :(

Пропадаю.

lx001

  • Гость
{ rm -f /tmp/.tar_success /tmp/.tar_failure ; tar zxvf ...... && touch /tmp/.tar_success || touch /tmp/.tar_failure ; } &

?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 258
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
& - это-же фоновый режим. У вас анализ $? будет идти раньше окончания tar.

Оффлайн Skull

  • Глобальный модератор
  • *****
  • Сообщений: 19 935
    • Домашняя страница
    • Email
Андрей Черепанов (cas@)

Оффлайн goshka

  • Завсегдатай
  • *
  • Сообщений: 114
    • Email
(tar cf t.tar pid_bad 2>/dev/null || echo 'Error' )&

Спасибо.

А как в основном процессе прочитать это echo после завершения?
Допустим, в основном процессе нужно рисовать progress_bar.
По завершении выдать 100% progress_bar, либо продолжить сценарий, либо выдать сообщение от ошибке и остановиться.

(tar cf t.tar pid_bad 2>/dev/null || echo 'Error' )&
 tar_pid=`pidof tar`
 PCT=0
(while true
 do
    echo $PCT
    sleep 1
    if [ ! -e "/proc/$tar_pid/status" ]  # Пока работает процесс, файл status существует.
    then
        echo 99
        sleep 1
        echo 100
        break
    fi
 GZIP_SIZE=`stat --format=%s ${TARBALL_DIR}/$1.tar.gz `
 PCT=`expr $GZIP_SIZE \* 100 / $EXPECTED_GZIP_SIZE`
 done ) | $DIALOG --title "Архивирование раздела /dev/$1" \
        --gauge "   Архивирование раздела /dev/$1 $cnt. " 0 0 0

Оффлайн goshka

  • Завсегдатай
  • *
  • Сообщений: 114
    • Email
Придумал запускать отрисовку progress_bar в фоновом режиме,  а выполнение tar в текущем shell.
После окончания tar, проверять код завершения и ждать: wait pidof (dialog) progress_bar.

Но ответ на предидущий вопрос все-равно бы интересовал.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 258
  • Учиться .... Телепатами не рождаются, ими ....
    • Email

Оффлайн goshka

  • Завсегдатай
  • *
  • Сообщений: 114
    • Email
Может. Но тогда необх запустить 2 фоновых процесса?
-tar &
-отрисовка progress_bar (dialog) &
в текущем shell wait (tar) ; wait(dialog)

- ?