Как убить процесс, у которого я не могу получить 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
197 +1
0
Ответы
1

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

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

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

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

killall -q stty

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

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

20 Апр 2024 в 13:12
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир