Matando múltiplos processos
Vamos supor que um processo qualquer gere 2.000 instâncias no servidor que dependendo do processo pode ou não sobrecarregar a máquina.
Problema : executar no prompt 2.000 comando de kill.
Claro que matar 2000 processo é inviável. Nem sempre o killall resolve o problema, ainda mais com processos invocados pelos usuários. Esse simples script, recebe como entrada um processo, e busca todos os PIDS, por fim eliminado todos.
O script é bem fácil de entender.
Problema : executar no prompt 2.000 comando de kill.
Claro que matar 2000 processo é inviável. Nem sempre o killall resolve o problema, ainda mais com processos invocados pelos usuários. Esse simples script, recebe como entrada um processo, e busca todos os PIDS, por fim eliminado todos.
O script é bem fácil de entender.
Descrição
Vamos supor que um processo qualquer gere 2.000 instâncias no servidor que dependendo do processo pode ou não sobrecarregar a máquina.
Problema : executar no prompt 2.000 comando de kill.
Claro que matar 2000 processo é inviável. Nem sempre o killall resolve o problema, ainda mais com processos invocados pelos usuários. Esse simples script, recebe como entrada um processo, e busca todos os PIDS, por fim eliminado todos.
O script é bem fácil de entender.
Problema : executar no prompt 2.000 comando de kill.
Claro que matar 2000 processo é inviável. Nem sempre o killall resolve o problema, ainda mais com processos invocados pelos usuários. Esse simples script, recebe como entrada um processo, e busca todos os PIDS, por fim eliminado todos.
O script é bem fácil de entender.
#/bin/bash
echo "Digite o nome do processo:"
read entrada
ps ax | grep $entrada | cut -f2 -d " " >> mata-processos.txt
LIMIT=$(cat mata-processos.txt | wc -l)
for ((i=1; i <= $LIMIT ; i++))
do
array[i]=$(sed -n "$i p" mata-processos.txt);
#echo ${array[$i]}
done
for ((i=1; i <= $LIMIT ; i++))
do
echo "Matando processo ${array[$i]}"
kill -9 ${array[$i]}
done
rm mata-processos.txt
Sua idéia é muito boa, alguma coisa não funcionou aqui, na verdade eu percebi que havia um pequeno problema na hora de usar o comando "cut", como o separador é " " ele só pegava os processos que tinham um espaço antes e o número depois, fiz alguns testes e mudei um monte de coisa, estou postando aqui as alterações com comentários.
Valeu
#/bin/bash
# Se nao for passado o nome do processo na linha de
# comando, pede ao usuario para digitar agora
if [ -z "$1" ]; then
# O "-n" e so para ficar na mesma linha =)
echo -n "Digite o nome do processo: "
read FILTRO
echo
else
# se foi passado o nome na linha de comando, manda
# ele para dentro da variavel FILTRO
FILTRO=$1
fi
# O comando ps esta sendo executado com os seguintes parametros:
# -o pid => mostra na saida somente o numero do PID, mais nada (nao precisa filtrar)
# -C ${FILTRO} => filtra todos os processos que tem a linha de comando informada
# --no-headers => nao mostra os cabecalhos na saida do ps
# Tudo isso vai ser enviado para o comando read que vai ler na variavel MATA_PID
# um numero de processo por vez
ps -o pid -C "${FILTRO}" --no-headers | while read MATA_PID; do
# Mostra o processo que vai ser morto
echo "Matando processo ${MATA_PID}"
# Mata o processo, se quiser melhorar ainda mais pode colocar um "&" no final da proxim
# linha, isso vai fazer com que o comando kill seja executado em segundo plano, isso
# significa que ele nao vai ficar esperando matar um processo para depois matar o outro,
# vai matar tudo de uma vez so.
kill -9 ${MATA_PID}
done