Как убить процесс, у которого я не могу получить pid на unix? В программе для чтения данных с устройства посредством usb я считываю данные таким образом, просто stream поток перенаправляю в файлroot@splincode:$ stty 4800 -F /dev/ttyUSB0 && cat /dev/ttyUSB0 > stream/tty.txt
все данные постоянно пишутся в файлы tty.txt , и если я исполняю команду выше, то через терминал я уже ее никак не смогу отключить через ctrl+z/ctrl+c и другие. Суть в том, что пользователи вообще не будут использовать ведь терминал, убивать процесс я должен своей программой.
беда в том, что моей программе в отдельном потоке приходится запускать эту команду, чтобы в другом потоке я мог считать данные из файла tty.txt
но файл постоянно растет и может достигать больших размеров, я хотел бы сделать так, чтобы я мог в любой момент запустить команду выше и убить эти команды посредством kill
но когда в терминале я запускаю (все из под root):root@splincode:$ ps aux
splinco+ 18157 0.3 1.2 871608 92860 ? Sl 12:47 0:05 /opt/google/chrome/chrome --type=renderer --enable-features=*AutofillCreditCardSigninPromo stream/tty.txt
root 18465 0.0 0.0 12800 668 pts/1 S+ 12:56 0:00 cat /dev/ttyUSB0
root 18466 0.1 0.0 0 0 ? S 12:56 0:01 [kworker/u8:0]
root 18492 0.0 0.0 0 0 ? S 12:56 0:00 [kworker/2:1]
root@splincode:$ ps aux | grep stty
root 18463 0.0 0.0 4476 760 pts/1 S+ 12:56 0:00 /bin/sh -c ??stty 4800 -F /dev/ttyUSB0 && cat /dev/ttyUSB0 > stream/tty.txt
root@splincode:$ pidof stty # ничего не выводит
Но процесс надо как-то убивать, и я не знаю как
Сам процесс правда убивается, если вытащить usb-шнур и обратно вставить, но такой возможности у меня не может быть, для тех людей, которые будут использовать программу
Может есть эмуляция отключения usb и включения его обратно для /dev/ttyUSB0 ?

21 Авг 2019 в 06:51
168 +1
0
Ответы
1

Если у вас нет возможности отключить и подключить USB устройство повторно, можно попробовать убить процесс, используя его PID. Однако, поскольку вы не знаете PID процесса, можно попробовать использовать команду pkill, чтобы убить процесс по имени команды. Например, в вашем случае:

pkill -f "stty 4800 -F /dev/ttyUSB0"

Команда pkill -f убьет процесс, содержащий в своем имени указанную фразу. Убедитесь, что в фразе указаны достаточно уникальные символы, чтобы не случайно завершить другие процессы.

Если это не сработает, можно попробовать использовать команду killall:

killall -q stty

Но обратите внимание, что это убьет все процессы с таким именем, что может быть нежелательно.

Если и это не сработает, возможно вам придется создать механизм для отслеживания PID процесса в вашей программе и управления им.

20 Апр в 13:12
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир