killall apenas para este terminal

1

Ao depurar, geralmente uso killall para eliminar um processo. Este é realmente um mau hábito, porque pode haver mais processos em execução com o mesmo nome no sistema.

Normalmente, o processo que eu quero matar é um descendente do mesmo pai (ou avô) do qual o killall é iniciado. Muitas vezes eu quero matar um programa iniciado no mesmo terminal ou um terminal em outra aba (no Konsole).

Existe uma maneira de informar killall (ou outro killer) para limitar o escopo a processos iniciados a partir deste terminal ou a processos que são descendentes do mesmo pai (grande)?

    
por Ole Tange 22.11.2018 / 09:42

1 resposta

2

Se você quiser matar todos os processos desta sessão (processos que possuem o tty atual como seu terminal de controle):

tty='tty'; pkill -t "${tty#/dev/}"

Ou ainda mais simples:

pkill -s 0

De acordo com pkill (1):

-s, --session sid,...

 Only match processes whose process session ID is  listed.   Ses-
 sion ID 0 is translated into pgrep's or pkill's own session ID.

As opções -t e -s podem ser combinadas (ANDed) com um padrão e outras opções, por exemplo. pgrep -s0 -x foo para os processos desta sessão nomeados exatamente foo . Infelizmente, nem pgrep nem pkill suportam predicados complexos no estilo tcpdump .

    
por 22.11.2018 / 10:43

Tags