skill não está funcionando para matar uma sessão no Redhat 7 box

1

Eu tinha o Redhat Linux 6.x que foi recentemente atualizado para a caixa Redhat 7. Anteriormente eu costumava usar o comando abaixo para matar as sessões do linux. Mas agora estou recebendo o erro abaixo se eu tentar matar várias sessões.

$ skill -kill pts/1 pts/0  pts/3
Memory fault

Como as páginas man também tentei, mas isso também não funcionou.

skill -KILL -t /dev/pts/*
        Kill users on PTY devices.

Por favor, você pode aconselhar como matar sessões no Redhat 7. Obrigado.

    
por Forever Learner 21.02.2018 / 12:44

2 respostas

1

Uma possível resposta se os usuários estiverem conectados por meio do ssh:

pkill -f <myusername>@pts/1

Para outros casos:

who -u 

end então mata pid (s), ou por exemplo, para matar todas as sessões do usuário, exceto a de root:

$ who -u | awk '!/^root /{print $6}' |xargs sudo kill
    
por 21.02.2018 / 13:58
1

Lembrando que a página man do skill diz:

These tools are probably obsolete and unportable. The command syntax is poorly defined. Consider using the killall, pkill, and pgrep commands instead

Eu acredito que a sintaxe que você está procurando é:

skill -t pts/0 -t pts/1 -t pts/3

... parece que a sintaxe expression requer um tty por -t flag.

Por que a habilidade não está realmente matando os processos, minha suspeita é que o formato de / proc / PID / stat mudou desde que a habilidade foi compilada, fazendo com que ela pule o processo no check_proc function (em uma cópia arbitrária do github de skill.c eu encontrei). Parece analisar / proc / PID / stat manualmente e nunca envia um sinal de kill para o (s) processo (s):

open("/proc/21102/stat", O_RDONLY)      = 4
read(4, "21102 (bash) S 21101 21102 21102"..., 128) = 128

...

open("/proc/22839/stat", O_RDONLY)      = 4
read(4, "22839 (view) S 21102 22839 21102"..., 128) = 128

Quando eu compilo uma nova cópia de habilidade, ela funciona como pretendido:

open("/proc/22926/stat", O_RDONLY)      = 4
read(4, "22926 (bash) S 22925 22926 22926"..., 128) = 128
readlink("/proc/22926/tty", 0x7f3e47e073e0, 127) = -1 ENOENT (No such file or directory)
readlink("/proc/22926/fd/2", "/dev/pts/2", 127) = 10
kill(22926, SIGKILL)                    = 0

Eu seguiria a sugestão da manpage e tonioc e mudaria para pkill ; por exemplo, para matar processos em pts / 1 e / ou pts / 2:

pkill -HUP -t pts/1,pts/2
    
por 21.02.2018 / 17:20