Melhor maneira de matar todos os processos com um identificador para algum arquivo

5

Isso mata todos os processos com um identificador para file / foo / bar (no bash):

 lsof /foo/bar 2>&1 | grep "/foo/bar" | sed "s/  */\t/g" | cut -f 2 | while read PID; do kill $PID; done

Isso não parece uma tarefa tão incomum que não haveria uma solução mais fácil, então estou pensando se há algo como killall ou uma mudança para kill que eu perdi, que faz o mesmo .

    
por Johannes Bauer 12.02.2014 / 09:10

1 resposta

5

É para isso que serve o -t . A man page sugere que você usaria isso para kill .

lsof -t /some/file | xargs kill

Tradicionalmente (antes dos lsof dias), você usaria:

fuser /some/file 2> /dev/null | xargs kill

para isso.

Algumas implementações fuser , como a encontrada na maioria dos sistemas operacionais baseados em Linux, Solaris ou FreeBSDs recentes, podem até mesmo matar por si mesmas:

fuser -k /some/file

No entanto, note que eles enviam um SIGKILL, não SIGTERM. Você pode escolher um sinal diferente com -TERM com algumas implementações e -s TERM com outras.

    
por 12.02.2014 / 09:23