Verificando e matando processos de um usuário antes de excluir

2

Estou trabalhando em um script para excluir usuários do arquivo de texto. No entanto, antes de excluir, quero verificar se algum processo de um usuário está sendo executado e, se estiver em execução, mate todos os processos e exclua. Aqui está como eu estou fazendo isso:

    if 
   #user doesn't exists then print user not exist
else
pids = 'ps U "$name" -o pid | head -n -1' 
    if [ -n "$pids" ]
    then
    for pid in $pids
    do
        sudo kill -KILL $pid
    done
fi


     sudo userdel

 $name -r -f    
    echo     


       echo "The user - $name - has been deleted!"
    echo
    fi
    done < "$fname"                         # double-quote fname
    echo

Portanto, basicamente é um loop para excluir usuários e uma declaração if para garantir que nenhum processo está sendo executado por um usuário e, se estiver sendo executado, forçar processos de fechamento e excluir usuário.

No entanto, não está funcionando e diz pids: command not found .. Alguma solução, como consertar?

    
por Umair 01.12.2014 / 03:29

2 respostas

2

Você tem o seguinte código:

pids = 'ps U "$name" -o pid | head -n -1'

bash é exigente quanto ao espaço em branco, aqui. Simplesmente remova os espaços de pids = ... e funcionará como pretendido:

pids='ps U "$name" -o pid | head -n -1'
    
por 01.12.2014 / 04:01
2

Poucas coisas:

1) Você não pode ter um espaço ao redor da atribuição de variável = no shell script. pids = ... deve ser pids=... .
2) kill pode aceitar vários PIDs. Você não precisa de um loop for pid in $pids ... . (embora com o próximo item, isso é irrelevante)
3) Seu código pode ser simplificado drasticamente fazendo:

pkill -KILL -U "$name"

Não há necessidade de verificar se o usuário tem algum processo em execução. Se não houver, o comando não faz nada.

    
por 01.12.2014 / 14:46