Encontre e mate o processo que está usando uma porta serial

3

Eu tenho várias portas seriais para cada um dos quais dispositivos estão conectados. Eles estão listados como /dev/ttyUSB* . Agora, eu preciso ter certeza de usar um script python que nenhum outro processo está usando qualquer um desses antes de eu executar um script kermit (para que o acesso não seja negado) login_init . Eu tentei os comandos ps e lsof . lsof deu a seguinte saída:

sof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
  Output information may be incomplete.
COMMAND     PID        USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
login_ini 13395       user4    4u   CHR  188,9      0t0  512 /dev/ttyUSB9
python    14410       user4    6u   CHR  188,9      0t0  512 /dev/ttyUSB9

Eu obtive o pid s dos processos, mas quando eu dou o comando killall , ele diz que nenhum processo foi encontrado da seguinte forma:

user4@user-pc-4:~/Scripts$ killall -9 13395
13395: no process found

user4@user-pc-4:~/Scripts$ killall -9 14410
13395: no process found

Este é o caminho certo e único, ou há maneiras melhores de fazê-lo?

    
por skrowten_hermit 04.04.2017 / 14:47

3 respostas

7

killall espera uma subseqüência do nome do programa como argumento. Para matar um processo pelo seu ID de processo, use kill .

Você pode matar diretamente todos os processos que possuem um arquivo aberto com o comando fuser .

fuser -k /dev/ttyUSB9
    
por 05.04.2017 / 03:43
1

Como você já tem os IDs do processo, pode usar apenas kill , por exemplo

kill -TERM 13395 14410 

(sugiro enviar um SIGTERM normal primeiro, antes de pressionar o botão SIGKILL ).

O comando killall usado nos sistemas Linux mata o processo por nome , assim como pkill . No entanto, em outros sistemas, como o Solaris, killall kills tudo (como parte do procedimento de encerramento), o que pode ser bom ter em mente se você os usar.

    
por 04.04.2017 / 15:07
1

Use os comandos abaixo para matar o pid

sudo kill -9 13395

sudo kill -9 14410

se você quiser matar todos (/ dev / ttyUSB9) em um único comando, então use o comando abaixo

sudo pkill -9 ttyUSB9

Para listar o id do processo em execução, use abaixo o comando

ps -ef | grep ttyUSB9

Para listar o número de id do processo em execução, use os comandos abaixo

ps -ef | grep ttyUSB9 | wc -l

    
por 04.04.2017 / 15:09