Подпроцесс убийства запущен в новом терминале

У меня есть java-программа, которая порождает новый подпроцесс, который сам выполняет команду в новом окне терминала:

Process proc = Runtime.getRuntime().exec("lxterminal -e sudo rfcomm watch " + BLUETOOTH_CHANNEL);.

rfcomm watch *CHANNEL* в моем случае наблюдает за заявленным файлом устройства канала/linux на предмет входящих данных через bluetooth. Когда соединение отменяется, я хочу иметь возможность восстановить его позже в программе на том же файле устройства. Поскольку rfcomm watch блокирует объявленный файл устройства, его необходимо закрыть перед повторным запуском той же команды. Это может быть достигнуто вручную путем отправки SIGTERM процессу (Ctrl + c внутри только что созданного окна терминала).

Моя проблема в том, что когда я делаю proc.destroy() или proc.destroyForcibly(), кажется, что только терминал убит, а rfcomm watch все еще работает (что приводит к сообщению об ошибке при попытке снова просмотреть тот же файл устройства). rfcomm watch также по-прежнему появляется под ps.

Как мне программно убить как новое окно терминала , так и команду, работающую внутри него?


person DeMo    schedule 05.04.2018    source источник


Ответы (1)


Я нашел решение/обходной путь, который соответствует моей цели, но может не подходить для подобных проблем.

Поскольку я хочу убить процесс, который блокирует канал rfcomm, который я объявил и не использую другие каналы и мне все равно, будет ли уничтожено что-либо еще, связанное с rfcomm, я просто запустите строку Runtime.getRuntime().exec("sudo pkill rfcomm"); в хуке выключения. Это работает для меня.

Если важно убить только один конкретный процесс, можно сделать что-то вроде этого: Как передать аргументы для уничтожения через канал

person DeMo    schedule 05.04.2018