Muitas vezes nos deparamos com a seguinte situação:
"Como matar todos os processos de um determinado usuário, de forma simples e rápida?"
Muitas vezes seria necessário que se listassem todos os processos, filtrando o resultado através de um comando como o "grep", e em conjunto com outras ferramentas, como "cut" ou "awk", filtrar apenas o número dos processos correspondentes ao usuário em questão, para somente então executarmos o "kill".
Esta tarefa pode parecer simples, mas toma alguns minutos preciosos, principalmente quando a tarefa que devemos executar exige rapidez e garantia de funcionalidade.
Justamente para não necessitar de verificações muito demoradas e filtragens sobre filtragens nos processos dos usuários, existe o script killuser.sh, desenvolvido com a função de eliminar do sistema (opcionalmente) os processos de um determinado usuário. Suas funcionalidades são:
- Suporte a processos por usuário;
- Suporte a processos por usuário e/ou seção (tty) e/ou programa.
Para utilizar o script, siga os passos abaixo:
O script
Copie o script abaixo para um arquivo nomeado como kill_user.sh em seu sistema. Este nome de arquivo pode ser perfeitamente alterado na medida de sua necessidade.
Antes de começarmos, lembrem-se: todas as frases iniciadas pela "#" não são executadas.
#/bin/bash
#
# Script para monitoração de serviço
#
# Procedimentos:
# Este script foi desenvolvido com intuito de facilitar a administração
# de processos do servidor, implementando o recurso de "kill" para os
# processos de um determinado usuário, por sessão (tty) e/ou processo
# específico.
#
# Variáveis do script
KILL="/bin/kill"
PS="/bin/ps"
GREP="/bin/grep"
AWK="/bin/awk"
MORE="/bin/more"
if [ "$1" ];
then
opc1=$(echo "$1" | $AWK -F'=' '{print $1}')
opcPar1=$(echo "$1" | $AWK -F'=' '{print $2}')
fi
if [ "$2" ];
then
opc2=$(echo "$2" | $AWK -F'=' '{print $1}')
opcPar2=$(echo "$2" | $AWK -F'=' '{print $2}')
fi
if [ "$3" ];
then
opc3=$(echo "$3" | $AWK -F'=' '{print $1}')
opcPar3=$(echo "$3" | $AWK -F'=' '{print $2}')
fi
varOpc=$1
parUsuario=$2
parOpc=$3
# Fazer verificação dos parâmetros recebidos
if [ ! "$1" ];
then
# Mostrar mensagem de utilização
echo "kill_user.sh - Utilitário para Gerenciamento de Processos"
echo -e "\n kill_user.sh é uma ferramenta utilizada para matar os"
echo "processos de um determinado usuário, em uma determinada sessão, "
echo "tendo como opcional a seleção de um processo específico."
echo -e "\nUtilização: kill_user.sh -user=usuario [-tty=tty] [-prog=programa] \n"
echo -e "Opções: \n"
echo -e " -user \t - Especifica o usuário para busca de processos (obrigatório)"
echo -e " -prog \t - Especifica programa da sessão do usuário (opcional)"
echo -e " -tty \t - Especifica terminal da sessão do usuário (opcional)"
echo -e "Exemplo:"
echo -e " $ $0 -user=usuario -tty=tty1 -prog=programa \n"
exit 1
fi
# Usuário
# Parâmetros recebidos pelo script
if [ "$opc1" -a "$opc1" == "-user" -a "$opcPar1" ];
then
processos=$($PS aux | $AWK -F' ' '{print $1,$2,$7,$11}' | $GREP ^$opcPar1 | $GREP -v grep)
parUsuario=$opcPar1
fi
# Programa
if [ "$opc2" -a "$opc2" == "-prog" -a "$opcPar2" ];
then
if [ "$processos" ];
then
processos=$(echo "$processos" | $AWK -F' ' '{print $1,$2,$3,$4}' | $GREP $opcPar2 | $GREP -v grep)
else
processos=$($PS aux | $AWK -F' ' '{print $1,$2,$7,$11}' | $GREP $opcPar2 | $GREP -v grep)
fi
elif [ "$opc2" -a "$opc2" == "-tty" -a "$opcPar2" ];
then
if [ "$processos" ];
then
processos=$(echo "$processos" | $AWK -F' ' '{print $1,$2,$3,$4}' | $GREP $opcPar2 | $GREP -v grep)
else
processos=$($PS aux | $AWK -F' ' '{print $1,$2,$7,$11}' | $GREP $opcPar2 | $GREP -v grep)
fi
fi
# Seção (tty)
if [ "$opc3" -a "$opc3" == "-tty" -a "$opcPar3" ];
then
if [ "$processos" ];
then
processos=$(echo "$processos" | $AWK -F' ' '{print $1,$2,$3,$4}' | $GREP $opcPar3 | $GREP -v grep)
else
processos=$($PS aux | $AWK -F' ' '{print $1,$2,$7,$11}' | $GREP $opcPar3 | $GREP -v grep)
fi
elif [ "$opc3" -a "$opc3" == "-prog" -a "$opcPar3" ];
then
if [ "$processos" ];
then
processos=$(echo "$processos" | $AWK -F' ' '{print $1,$2,$3,$4}' | $GREP $opcPar3 | $GREP -v grep)
else
processos=$($PS aux | $AWK -F' ' '{print $1,$2,$7,$11}' | $GREP $opcPar3 | $GREP -v grep)
fi
fi
# Mostrar listagem de processos encontrados
echo -e "\n--------------------------------------------------------------------------------"
echo -e " Kill User - Gerenciador Simples de processos para sistemas UNIX - Shell Script"
echo -e "--------------------------------------------------------------------------------"
echo -e " Processos encontrados para usuário [$parUsuario]: \n"
echo "$processos" | $AWK -F' ' '{print $2,$3,$4}' | $MORE
echo -e "\n\nConfirme execução ? [s/N]: \c";
read varConfirma
if [ "$varConfirma" == "s" -o "$varConfirma" == "S" ];
then
# Executar comando
echo -e "\nProcessos do usuário [$parUsuario] foram cancelados com sucesso!\n"
pidProcessos=$(echo "$processos" | $AWK -F' ' '{print $2}')
$KILL -9 $pidProcessos 2> /dev/null
else
# Mostrar mensagem de aviso
echo -e "\nProcesso do usuário [$parUsuario] não foram cancelados..."
echo -e "Você não confirmou a execução!\n"
fi
Configurações
As configurações deste script resumem-se à troca de permissão do script, adicionando permissão de execução, além de certificar-se de que este script está em um diretório exportado no PATH do seu shell do sistema. Para isto, utilize os seguintes comandos, admitindo que o script foi criado em /opt/scripts:
# chmod 755 /opt/scripts/kill_user.sh
# ln -s /opt/scripts/kill_user.sh /usr/bin/kill_user.sh
Pode-se também gravar o arquivo diretamente em um diretório já exportado no PATH do sistema, como: /usr/bin, /usr/local/bin, /bin, etc... ou alterar a variável PATH em /etc/profile.
Agora, basta executar o script seguindo sua sintaxe:
# kill_user.sh
kill_user.sh - Utilitário para Gerenciamento de Processos
Desenvolvido por Power Consultoria e Informática Ltda
kill_user.sh é uma ferramenta utilizada para matar os
processos de um determinado usuário, em uma determinada sessão,
tendo como opcional a seleção de um processo específico.
Utilização: kill_user.sh -user=usuario [-tty=tty] [-prog=programa]
Opções:
-user - Especifica o usuário para busca de processos (obrigatório)
-prog - Especifica programa da sessão do usuário (opcional)
-tty - Especifica terminal da sessão do usuário (opcional)
Exemplo:
$ ./kill_user.sh -user=usuario -tty=tty1 -prog=programa
Referência
Um abraço.