Basicamente, preciso verificar a árvore de processos e encontrar processos que correspondam a um determinado nome e que começaram a ser executados mais de uma semana por semana. Depois de tê-los, preciso matá-los. Todos os processos ainda são vistos como em estado de execução pelo sistema, apenas sem usar nenhum horário do sistema. Eles também costumam ficar para sempre nesse estado.
Idealmente, eu gostaria de algo semelhante para encontrar, mas para processos.
O sistema é o Debian linux e isso será script e executado pelo cron, então não tenho problemas reais com algo grande, mas compreensível.
Respostas:
Você pode fazer isso com uma combinação de ps, awk e kill:
Fornece uma saída de três colunas, com o PID do processo, o tempo decorrido desde o início do processo e o nome do comando, sem argumentos. O tempo decorrido se parece com um destes:
Como você deseja que os processos estejam em execução há mais de uma semana, procure linhas que correspondam ao terceiro padrão. Você pode usar o awk para filtrar os processos executando o tempo e o nome do comando, assim:
que imprimirá os pids de todos os comandos correspondentes a 'mycommand' que estão em execução há mais de 7 dias. Canalize essa lista para matar, e pronto:
fonte
etimes
é mais útil - serverfault.com/a/393476/67675killall --quiet --older-than 1w process_name
fonte
Todas as informações que você precisa podem ser obtidas
ps -ef
. Veja a coluna "STIME". Combine isso comgrep
para resolver os processos que você precisa. Nesse ponto, você pode usarcut
para pegar o pid de todos os processos correspondentes e passá-los parakill
.Entre em contato se desejar obter mais detalhes sobre como fazer isso.
fonte
se você é root, para se livrar do lixo (/ proc / fs proc / stat ...)
fonte
Quando um processo é iniciado, ele cria um diretório no sistema de arquivos / proc. Você pode usar o comando find para obter diretórios com mais de 7 dias e eliminar os processos da seguinte maneira:
fonte
find: warning: you have specified the -maxdepth option after a non-option argument -user, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
mover -maxdepth para ser a primeira saída que não retorna nenhum processo, e tenho certeza de que muitos devem corresponder.Ninguém mencionou ps-watcher aqui. Eu acho que você pode comparar $ start_time usando a função decorrido2sec, mas não tenho certeza. Aqui está o meu primeiro pensamento:
não faço ideia se isso funciona, mas deve ser um bom ponto de partida.
fonte