Você pode matar processos pelo nome. Por exemplo, no Linux, * BSD e Solaris, pkill myprogram
elimina todos os processos cujo nome contém myprogram
(use pkill '^myprogram$'
para uma correspondência exata). Se você executá-lo como um usuário não-root, apenas os processos desse usuário serão eliminados, e há outras opções para controlar a correspondência (consulte o manual em seu sistema para obter detalhes).
Se você deseja segmentar especificamente os processos iniciados pelo agendador e você está eliminando os processos manualmente, pode executar ps f
(somente Linux) ou pstree
(somente Linux) ou ptree
para exibir os processos em uma árvore e ver quais processos foram iniciados pelo cron.
Se você quiser poder eliminar esses processos automaticamente em um método caseiro, faça-os armazenar seu ID de processo em um arquivo. Esse tipo de arquivo é chamado de pidfile quando é usado para ter apenas uma única instância do processo em execução (que pode ou não ser algo que você deseja). Se você quiser várias instâncias, armazene os PIDs em arquivos separados em um diretório comum; aqui está um snippet de shell que faz isso:
pid_dir=/var/run/myprogram # must have been created e.g. at boot time
myprogram &
pid_file=$pid_dir/$!.pid
touch "$pid_file"
wait
rm "$pid_file"
Uma solução melhor, se você tiver critérios rígidos para detectar processos em fuga, é usar um programa de monitoramento geral ou, em casos simples, limitar o tempo de execução do processo. Você pode achar esses links úteis:
- “ Monit pode iniciar um processo se ele não for executado, reiniciar um processo se ele não responder e interromper um processo se usa muitos recursos. ”
- Preciso de ajuda com um cronjob para procurar processos em fuga e matá-los
- Como limitar uso de recursos para economizar CPU + RAM para um determinado processo?
- Existe uma maneira de limitar a quantidade de memória que um determinado processo pode usar no Unix?