У меня есть 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
.
Как мне программно убить как новое окно терминала , так и команду, работающую внутри него?