Como faço para matar um processo que continua respawning, sem matar seu processo de monitor?

3

Existe uma maneira de colocar um processo em algum tipo de "lista negra" no Linux?

    
por fûX 25.02.2018 / 00:01

3 respostas

11

O caminho normal seria mudar a configuração do programa do monitor para que ele não continue fazendo aquilo que você não quer que ele faça. Suponho que você não possa fazer isso por algum motivo, mas qualquer outra coisa é uma solução alternativa que não funcione em todas as circunstâncias.

Você não pode listar um processo : um processo é uma entidade de tempo de execução. O processo não existe até ser iniciado. Uma vez iniciado, é tarde demais para impedir que ele seja iniciado. E como você identificaria o processo que não deveria ter começado, afinal?

Você pode colocar uma lista negra em um programa , ou mais precisamente, em uma instalação particular de um programa. Todos os programas são iniciados a partir de um arquivo executável. Então, se você organizar o arquivo executável para não existir, ele não será iniciado. Você pode removê-lo, renomeá-lo ou até torná-lo não executável:

chmod a-x /path/to/program

Se você não quer ou não pode modificar o sistema de arquivos por algum motivo, mas tem acesso root, você pode até usar uma estrutura de segurança como o SELinux ou o AppArmor para proibir o monitor de executar este programa em particular. Mas isso é mais complicado.

No entanto, se um monitor continuar tentando reaparecer esse programa, ele poderá ou não lidar de maneira sensata se o executável desaparecer. Pode spam você (ou alguns arquivos de log com mensagens de erro).

Assumindo que o monitor só mantém o programa ativo (ao contrário de verificar a funcionalidade do programa, por exemplo, um monitor de um processo do servidor da Web pode tentar acessar periodicamente uma página da Web e reiniciar o servidor se não estiver respondendo), poderia substituir o programa por um programa que não faz nada além de bloquear para sempre. Não há nenhum programa que faça isso na coleção de utilitários básicos, mas você pode escrever facilmente:

#!/bin/sh
while sleep 999999999; do :; done

Dependendo do motivo pelo qual você deseja bloquear esse programa, você pode ou não conseguir um resultado semelhante suspendendo o processo do programa original, com pkill -STOP programname ou kill -STOP 1234 , em que 1234 é o ID do processo. Isso mantém o processo, mas não faz nada até que seja explicitamente retomado (com kill -CONT ). O processo não consumirá nenhum tempo da CPU e sua memória será substituída quando o sistema exigir RAM para outras coisas, mas continuará consumindo recursos como arquivos abertos.

    
por 25.02.2018 / 00:35
5

Eu sugiro tentar congelá-lo em vez de matá-lo. Dependendo de como o processo de monitoramento está lidando com isso, isso pode ser suficiente.

kill -STOP <pid>
    
por 25.02.2018 / 00:18
5

Uma maneira certa é renomear esse programa e, em seguida, matá-lo mais uma vez. Quando ele puder ser executado novamente, devolva seu nome original.

    
por 25.02.2018 / 00:32

Tags