Как избежать “RXTX Warning: Removing stale lock file. /var/lock/LCK..ttyACM0”

Вопрос или проблема

Я использую RXTXcomm.jar и librxtxSerial.so из пакета librxtx-java на 64-битной Ubuntu 18.04 LTS и получаю следующее предупреждение каждый раз, когда запускаю свое приложение на 64-битной JRE версии 1.6.0_45:

RXTX Warning: Removing stale lock file. /var/lock/LCK..ttyACM0

Есть ли способ избавиться от этого надоедливого предупреждения RXTX?

Вы можете просто добавить “sudo” перед выполнением вашего java-приложения.

sudo java -jar xxxxx.jar

Так как для удаления файла блокировки могут потребоваться права “администратора”.

Или вы можете удалить файл блокировки вручную перед запуском JAVA-программы.

sudo rm -f /var/lock/<имя файла блокировки>

Это может случиться, если ваша программа ранее завершала работу, не закрыв этот последовательный порт. Если этот порт используется на протяжении всего выполнения программы, и вы не беспокоитесь о зависших портах во время работы программы, его можно закрыть с помощью Runtime.getRuntime().addShutdownHook(…). Поскольку текущая конвенция — использовать Cleaners вместо finalize(), вызов port.cleanable.clean() из этого хука может быть разумным выбором при проектировании.

Мне удалось исправить эту проблему с помощью вышеуказанного проектного решения без предоставления программе прав SUDO.

Ответ или решение

Для решения проблемы с "RXTX Warning: Removing stale lock file. /var/lock/LCK..ttyACM0" при использовании библиотеки RXTXcomm.jar и файла librxtxSerial.so под 64-битной версией Ubuntu 18.04 LTS совместно с Java SE 1.6.0_45, необходимо устранить причины возникновения этого предупреждения.

Введение в проблему

Когда вы видите предупреждение о "stale lock file", это означает, что предыдущий запуск вашего приложения не закрыл последовательно используемый порт корректно. В результате чего в системе остаётся заблокированный файл в каталоге /var/lock/, который пытается удалить RXTX.

Причины и решение

  1. Необработанные завершения программы
    Программа может завершаться аварийно без корректного закрытия порта. Чтобы этого избежать, добавьте в код обработку закрытия порта в блоке finally или используйте ShutdownHook.

  2. Реализация ShutdownHook для корректного закрытия порта

    • Используйте Runtime.getRuntime().addShutdownHook(...), чтобы гарантировать закрытие порта, даже если программа завершается неожиданно.
    • Вместо устаревшего метода finalize() предпочтительнее использовать Cleaner.
  3. Ручное удаление файлов блокировок

    • Если вы доверяете своему коду, но хотите временно избавиться от предупреждения, можно вручную удалить файл блокировки перед запуском программы.
      sudo rm -f /var/lock/LCK..ttyACM0
  4. Запуск приложения от имени администратора

    • Выполнение программы с правами суперпользователя позволит автоматически удалять эти файлы, но этот способ не рекомендуется из соображений безопасности.
      sudo java -jar yourapplication.jar

Пошаговый план устранения

  • Шаг 1: Проверьте и измените код программы, добавив механизмы обработки закрытия порта. Это важно для предоставления устойчивого решения.
  • Шаг 2: Изучите документацию RXTX на предмет рекомендаций по безопасному управлению последовательными портами.
  • Шаг 3: Ручная или автоматическая проверка и удаление блокировочных файлов в тестировании или деплое.

Заключение

Проактивное управление ресурсами системы и тщательное проектирование вашего приложения избавят вас от появления предупреждений о "stale lock files". Это не только повысит стабильность приложения, но и приведет к лучшей практической эксплуатации последовательных портов.

Такой подход обеспечит профессиональное и стабильное функционирование вашего приложения в любой среде.

Оцените материал
Добавить комментарий

Капча загружается...