Intereting Posts
Поиск списка модулей, которые используются во время загрузки Можно ли перенаправить системные звуковые сигналы на обычный звук? Найти ИК-передающее устройство Есть ли простой инструмент Bash, который может быстро отображать базовый HTML? Пакеты установщика: .bin, -rpm.bin, tar, tar.z Ошибка Ubuntu 14 – nouveau Отправка файлов в каталоги с использованием сопоставления имен Как создать контрольные суммы sha1 в архиве tar на busybox без использования большого дискового пространства Разница в синтаксисе команды find С помощью команды «cat» Linux, как показать только определенные строки по числу Внешняя аутентификация пользователя в сеансе PAM / сеансе PAM в сеансе PAM Невозможно установить переменную LC_TIME для текущего процесса Определите, имеет ли процессор Intel I или ОЗУ аппаратный сбой? Как сделать машину доступной из локальной сети с использованием имени хоста Запуск удаленного GUI-приложения через SSH в качестве стандартного пользователя, не являющегося администратором

Как я могу проверить, не прошла ли фоновая работа до ее выхода?

Я пишу скрипт, который запускает виртуальный кадровый буфер с Xvfb. Я хочу убедиться, что команда выполнена успешно, но я не хочу, чтобы скрипт ждал ее завершения, потому что Xvfb продолжает работать, пока X-сервер не будет уничтожен. Например:

if ! Xvfb $DISPLAY &; then echo 'Error: failed to create virtual frame buffer' exit 1 fi xpid=$! # do stuff that uses frame buffer kill $xpid 

Проблема в том, что он вызывает синтаксическую ошибку на &; :

 $ stuff.sh stuff.sh: line 149: syntax error near unexpected token `;' stuff.sh: line 149: `if ! Xvfb $DISPLAY &; then' 

Я попытался изменить эту строку, if ! Xvfb $DISPLAY & ; if ! Xvfb $DISPLAY & ; но все равно выдает ошибку.

Символ & является control operator и завершает список проверяемых команд. Следуя этому определению, следующее не содержит синтаксических ошибок:

 if ! Xvfb $DISPLAY & then echo 'Error: failed to create virtual frame buffer' exit 1 fi 

Беда в том, что при фоновой команде Xvfb результат теста всегда будет равен нулю / истине.

Я запустил бы процесс, затем подождал бы достаточно долго, чтобы он умер, затем проверил, все ли еще вокруг:

 Xvfb $DISPLAY & xvfbpid=$! sleep 3 ## adjust to taste if ! ps -p $xvfbpid > /dev/null then echo 'Error: failed to create virtual frame buffer' exit 1 fi 

Рекомендации:

  • Базовые спецификации Open Group Issue 7, выпуск 2018 : Shell & Utilities – Язык команд оболочки – Команды оболочки – Списки – Асинхронные списки – Состояние выхода