На этот вопрос уже есть ответ здесь:
У меня проблема со сценарием, в который я написал установить кучу приложений, в основном, когда он перебирает массив имен приложений для установки, он проверяет их, выполнив:
dpkg -l | grep -q $i
и на основе $? установит или пропустит приложение. Проблема в том, что для нескольких элементов он не работает из-за блокировки dpkg, почти весь список работает, только полдюжины не работают, но работают, если вы снова запустите сценарий.
Можно ли дождаться завершения dpkg перед запуском 'apt-get install'?
На данный момент я добавил 'sleep 0.5' между двумя строками, и это устранило проблему, но, очевидно, некрасиво и медленнее.
Спасибо, Noki
Для идентификации процессов с помощью файлов или сокетов, можно использовать fuser
команда (см. man fuser
для большего количества информации). В случае dpkg
, можно проверить на блокировку как корень со следующей командой:
fuser /var/lib/dpkg/lock