2012-09-03 2 views
0

J'essaie d'écrire un script qui surveille% cpu% mem, le temps cpu etc (le plus sera le mieux) d'un certain processus. Quelque chose comme moniteur de performance sur Windows (perfmon).
Je sais qu'il existe déjà des outils pour cela, mais je dois le faire en utilisant les fonctions basic et built in car cela doit marcher sur linux et (solaris */aix/hpux).
Il serait bon d'avoir une sortie similaire à celle de perfmon.exe afin que je devrai permet de dire toutes les 5 secondes mis à jour journal de sortie du processus suivi au format:Mon propre moniteur de performance Unix pour un processus

date %mem %cpu cputime private_bytes(?) virtual_bytes(?)   

Je ne sais pas si d'extraire des données à partir du haut (qui n'est en fait pas le même sur tous les os qui seront utilisés) ou essayez de l'extraire de la requête 'ps'.

Je suis essayer de le faire par une boucle comme:

for $count; do 
    sleep $delay 
    date >>output.txt 
    ps -A -o pid,%cpu,%mem,time -o comm= | grep -v grep | grep $process >> output.txt 
done 

Je vous serais reconnaissant des conseils.

BR

+0

Sous Linux, vous utiliserez '/ proc /' pour lire sa documentation. –

+0

'/ proc' serait plutôt pas portable –

Répondre

0

Si la portabilité entre les différents Unices est l'objectif, votre approche semble OK (grep -v n'est pas nécessaire que) mais soyez prudent d'utiliser ps communs commutateurs

+0

Viz. vous pouvez faire quelque chose comme 'p = $ {process #?}; grep "[$ {process% $ p}] $ p" ' – tripleee

+0

Comme il veut surveiller un processus particulier, il n'y a pas besoin de' grep 'du tout. Utilisez '-C' ou' -p' pour que 'ps' affiche les données d'une commande particulière ou d'un PID. –

2

Essayez quelque chose comme

ps -o pid,user,%cpu,%mem,rss,vsize,time,cmd -C NAME 

ou

ps -o pid,user,%cpu,%mem,rss,vsize,time,cmd -p PID 

N'utilisez pas -A si vous n'êtes intéressé que par des processus particuliers.

Questions connexes