J'ai des bots, qui sont exécutés par le planificateur système à un intervalle de temps donné. Mais parfois, en raison d'une erreur logique, je dois arrêter ces robots manuellement. Comment puis-je trouver ces processus exécutés par le planificateur et les tuer ?
Réponse acceptée :
Vous pouvez tuer les processus par leur nom. Par exemple, sous Linux, *BSD et Solaris, pkill myprogram
tue tous les processus dont le nom contient myprogram
(utilisez pkill '^myprogram$'
pour une correspondance exacte). Si vous l'exécutez en tant qu'utilisateur non root, seuls les processus de cet utilisateur seront tués, et il existe d'autres options pour contrôler la correspondance (voir le manuel de votre système pour plus de détails).
Si vous souhaitez cibler spécifiquement les processus démarrés par le planificateur et que vous tuez les processus manuellement, vous pouvez exécuter ps f
(Linux uniquement) ou pstree
(Linux uniquement) ou ptree
pour afficher les processus dans une arborescence et voir quels processus ont été lancés par cron.
Si vous voulez pouvoir tuer ces processus automatiquement dans une méthode maison, faites-leur stocker leur ID de processus dans un fichier. Ce type de fichier est appelé un fichier pid lorsqu'il est utilisé pour n'avoir qu'une seule instance du processus en cours d'exécution (ce qui peut ou non être quelque chose que vous voulez). Si vous voulez plusieurs instances, stockez les PID dans des fichiers séparés dans un répertoire commun ; voici un extrait de shell qui fait cela :
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"
Une meilleure solution, si vous avez des critères stricts pour détecter les processus incontrôlables, consiste à utiliser un programme de surveillance général ou, dans des cas simples, à simplement limiter la durée d'exécution du processus. Ces liens peuvent vous être utiles :
- "Monit peut démarrer un processus s'il ne s'exécute pas, redémarrer un processus s'il ne répond pas et arrêter un processus s'il utilise trop de ressources."
- J'ai besoin d'aide avec une tâche cron pour surveiller les processus incontrôlables et les tuer
- Comment limiter l'utilisation des ressources pour économiser CPU+RAM pour un certain processus ?
- Existe-t-il un moyen de limiter la quantité de mémoire qu'un processus particulier peut utiliser sous Unix ?