Comment tuez tous les processus Linux qui ont plus d'un certain âge ?

J'ai un problème avec certains processus de type zombie sur un certain serveur qui doivent être tués de temps en temps. Comment puis-je identifier au mieux ceux qui ont duré plus d'une heure ?

请先 登录 后评论

5 réponses

abyx

Utiliser ps est la bonne manière. J'ai déjà fait quelque chose de similaire auparavant mais je n'ai pas la source sous la main. Généralement - ps a une option pour lui dire quels champs afficher et par lesquels trier. Vous pouvez trier la sortie par durée d'exécution, grep le processus que vous voulez, puis le tuer.

HTH

请先 登录 后评论
Mark Harrison

Pour tout ce qui date de plus d'un jour,

ps aux

vous donnera la réponse, mais elle se résume à la précision du jour, ce qui pourrait ne pas être aussi utile.

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   7200   308 ?        Ss   Jun22   0:02 init [5]
root         2  0.0  0.0      0     0 ?        S    Jun22   0:02 [migration/0]
root         3  0.0  0.0      0     0 ?        SN   Jun22   0:18 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    Jun22   0:00 [watchdog/0]

Si vous utilisez Linux ou un autre système avec le système de fichiers /proc, dans cet exemple, vous ne pouvez voir que le processus 1 en cours d'exécution depuis le 22 juin, mais aucune indication de l'heure à laquelle il a été lancé.

stat /proc/<pid>

vous donnera une réponse plus précise. Par exemple, voici un horodatage exact pour le processus 1, que ps affiche uniquement sous la forme Jun22 :

ohm ~$ stat /proc/1
  File: `/proc/1'
  Size: 0               Blocks: 0          IO Block: 4096   directory
Device: 3h/3d   Inode: 65538       Links: 5
Access: (0555/dr-xr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2008-06-22 15:37:44.347627750 -0700
Modify: 2008-06-22 15:37:44.347627750 -0700
Change: 2008-06-22 15:37:44.347627750 -0700
请先 登录 后评论
yukondude

J'ai trouvé une réponse qui me convient :

avertissement : cela trouvera et tuera les processus longs

ps -eo uid,pid,etime | egrep '^ *user-id' | egrep ' ([0-9]+-)?([0-9]{2}:?){3}' | awk '{print $2}' | xargs -I{} kill {}

(Où user-id est l'ID d'un utilisateur spécifique avec des processus de longue durée.)

La deuxième expression régulière correspond à une heure qui a un nombre de jours facultatif, suivi d'une heure, d'une minute et d'un second composant, et qui dure donc au moins une heure.

请先 登录 后评论
ggasp

De cette façon, vous pouvez obtenir la liste des dix processus les plus anciens :

ps -elf | trier -r -k12 | tête -n 10
请先 登录 后评论
Maniraj Patri

faire un ps -aef. cela vous montrera l'heure à laquelle le processus a commencé. Ensuite, à l'aide de la commande date, trouvez l'heure actuelle. Calculez la différence entre les deux pour trouver l'âge du processus.

请先 登录 后评论