Fondamentalement, je dois être en mesure d'analyser l'arborescence des processus et de trouver des processus qui correspondent à un certain nom et j'ai commencé à exécuter plus d'une semaine. Une fois que je les ai, je dois les tuer. Tous les processus sont toujours considérés comme étant dans un état en cours d'exécution par le système, n'utilisant simplement aucune heure système. Ils resteront généralement éternels dans cet état aussi.
Idéalement, j'aimerais trouver quelque chose de similaire, mais pour les processus.
Le système est Linux Debian et ce sera scripté et exécuté par cron donc je n'ai pas de vrai problème avec quelque chose de grand mais compréhensible.
Réponses:
Vous pouvez le faire avec une combinaison de ps, awk et kill:
Vous donne une sortie à trois colonnes, avec le PID du processus, le temps écoulé depuis le démarrage du processus et le nom de la commande, sans arguments. Le temps écoulé ressemble à l'un d'eux:
Puisque vous voulez des processus qui s'exécutent depuis plus d'une semaine, vous devriez rechercher des lignes correspondant à ce troisième modèle. Vous pouvez utiliser awk pour filtrer les processus en exécutant le temps et le nom de la commande, comme ceci:
qui affichera les pids de toutes les commandes correspondant à 'mycommand' qui fonctionnent depuis plus de 7 jours. Canalisez cette liste en kill, et vous avez terminé:
la source
etimes
est plus pratique - serverfault.com/a/393476/67675killall --quiet --older-than 1w process_name
la source
Toutes les informations dont vous avez besoin peuvent être récupérées
ps -ef
. Voir la colonne "STIME". Combinez cela avecgrep
pour trier les processus dont vous avez besoin. À ce stade, vous pouvez utilisercut
pour saisir le pid de tous les processus correspondants et les transmettre àkill
.Veuillez me faire savoir si vous souhaitez plus de détails sur la façon de procéder.
la source
si vous êtes root, pour vous débarrasser de la corbeille (/ proc / fs proc / stat ...)
la source
Lorsqu'un processus démarre, il crée un répertoire dans le système de fichiers / proc. Vous pouvez utiliser la commande find pour obtenir des répertoires de plus de 7 jours et tuer les processus comme suit:
la source
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.
déplaçant -maxdepth pour être la première sortie, il ne renvoie aucun processus, et je suis certain que beaucoup doivent correspondre.Personne n'a mentionné ps-watcher ici. Je pense que vous pourriez comparer $ start_time en utilisant la fonction elapsed2sec mais je ne suis pas tout à fait sûr. Voici ma première pensée:
aucune idée si cela fonctionne, mais cela devrait être un bon point de départ.
la source