mata processos em uma linha com kill, awk, ps e grep

1

Eu tenho alguns processos que surgem e eu posso imprimir uma linha do pgid que eu gostaria de inserir em um comando kill.

aqui está o que eu tenho: sudo ps o pgid,args | grep mininet: | sudo awk '{print -$0}'

retorna algo como

-3834
-3841
-3844
-3846
-3848
-3853
-3856
-3859
-3862

Eu neguei a saída na parte {print -$0} para que eles também matem os processos filhos.

o comando grep procura por um argumento nos comandos bash que denotam os programas pais

agora, gostaria de ligar para sudo kill -SIGSTOP , mas vejo aqui link que você não pode usar comandos dentro do awk que não seja condicionais, imprimir, etc. Estou enganado nisso ou existe uma maneira de redirecionar a entrada para o comando kill para parar os processos.

contexto: pausando o emulador de rede mininet. Eu gostaria de fazer isso como um one-liner porque seria legal. Estou meio confuso sobre como a prioridade é dada com | e como inserir um comando no outro.

Codificação pela filosofia unix Eu não deveria me preocupar com gargalos até mais tarde, mas se alguém achar que essa é uma maneira ruim de fazer isso, eu apreciaria essa informação também.

Obrigado ~

editar:

Este comando pára os processos:

sudo ps o pgid,args | grep mininet: | sudo awk  '{system("sudo kill --signal SIGSTOP -"$1)}' - 

Em awk , você pode usar system("program ")

aceitando o conselho de que isso funciona para:

sudo pgrep -f mininet: | sudo awk  '{system("sudo kill --signal SIGCONT -"$1)}' - 
    
por channon 30.06.2015 / 21:56

1 resposta

1

Este comando pára os processos:

sudo ps o pgid,args | grep mininet: | sudo awk  '{system("sudo kill --signal SIGSTOP -"$1)}' - 

Em awk , você pode usar system("program ")

seguindo o conselho para usar o pgrep, isso funciona também:

sudo pgrep -f mininet: | sudo awk  '{system("sudo kill --signal SIGCONT -"$1)}' - 
    
por 30.06.2015 / 23:33