Como selecionar ids de trabalho usando grep / sed / awk

3

Eu executo trabalhos de análise física em uma grade de computador. Às vezes os trabalhos dão errado e eu tenho que matá-los (um por um) o que é doloroso. Você pode por favor me sugerir como posso selecionar apenas os valores numéricos (748736838 e assim por diante) desta saída:

$ps -W

mhaque -748736838   0   W                                   
mhaque -748736879   0   W                                   
mhaque -748737079   0   W                                   
mhaque -748737185   0   W                                   
mhaque -748737276   0   W

(e centenas de linhas como esta)

Eu tentei o comando sed / awk / grep (do stackExchange) mas não consegui separar os valores numéricos. Existe um comando que pode selecionar os valores numéricos e também colocar 'kill' na frente deles? Por exemplo, algo assim (tubulação):

ps -W  |  awk/sed/grep (what_to_use) |  (some_command to place "kill") | > file.list

Qual me daria o seguinte (em file.list):

kill 748736838 
kill 748736879
...so on..

Então eu posso simplesmente copiar e colá-lo no shell de grade para matar todos os trabalhos atrasados / em espera.

    
por R. Haq 17.10.2016 / 11:23

1 resposta

4

Se você quiser matar todos dos trabalhos mhaque , é ainda mais simples:

pkill -9 mhaque

( -9 é o sinal para enviar, neste caso eu escolhi SIGKILL , mude de acordo com as suas necessidades).

Além disso,

pidof mhaque 

retorna a lista simples dos jobs PIDs, com mais nada. Você pode usá-lo também como segue

kill -9 $(pidof mhaque)

que produz o mesmo efeito que o primeiro comando. Tudo isso é muito mais fácil do que o script. Por exemplo,

$ vlc fulvio.mkv &> /dev/null &
[1] 28006
$ vlc fulvio.mkv &> /dev/null &
[2] 28028
$ pidof vlc
28028 28006
$ pkill -9 vlc
$ ps ax | grep vlc
28054 pts/18   S+     0:00 grep --color=auto vlc
[1]-  Killed                  vlc fulvio.mkv &> /dev/null
[2]+  Killed                  vlc fulvio.mkv &> /dev/null

EDITAR :

em resposta ao esclarecimento contido no comentário, o comando

ps -W | awk '{print $2}' | cut -d"-" -f2

produz a lista simples de PIDs de jobs. Você pode gravá-los em um arquivo ou processá-los diretamente como

kill -9 $(ps -W | awk '{print $2}' | cut -d"-" -f2)

EDIT2

Estou um pouco surpreso que isso não funcione como esperado, porque o comando acima é apenas Bash padrão. Em qual sistema você está, exatamente? De qualquer forma, você pode tentar:

 for i in $(ps -W | awk '{print $2}' | cut -d"-" -f2); do kill -9 $i; done
    
por 17.10.2016 / 11:34

Tags