J'essaie d'écrire un script qui peut surveiller l'utilisation du processeur d'un processus sur un intervalle (pour créer un graphique).
Jusqu'à présent, c'est la commande que j'utilise
ps -p $PROCID -o cputime,etimes
Ma seule préoccupation est que la sortie de cputime semble être [dd]hh:mm
(ou quelque chose de similaire, je ne me souviens plus du haut de ma tête maintenant)
Existe-t-il un moyen de formater cputime en secondes, un peu comme etime -> etimes pour obtenir le temps écoulé en secondes?
Edit: c'est la sortie que je reçois actuellement
2-03:01:33 2653793
J'aimerais que le premier paramètre soit formaté en secondes, pas en jours-heures: minutes: secondes.
bash
ps
text-formatting
dreadiscool
la source
la source
Réponses:
Cela convertit la première fois en secondes:
Par exemple, la commande ps produit:
La
awk
commande traite cela et retourne:Explication
-F'[: ]+'
Cela indique à awk de traiter les deux-points et les espaces comme des séparateurs de champs. De cette façon, les heures, les minutes et les secondes apparaissent comme des champs séparés.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
L'initiale
/:/
restreint le code à travailler uniquement sur les lignes qui incluent deux points. Cela supprime les lignes d'en-tête. Le nombre de secondes est calculé à partir des heures, minutes, secondes viat=$3+60*($2+60*$1)
. La valeur résultante pourt
est ensuite imprimée parallèlement au temps écoulé.Jours de manutention
Si
ps
produit des jours, des heures, des minutes, des secondes, comme dans:Utilisez ensuite ce code à la place:
Si des jours peuvent ou non être ajoutés à la sortie, utilisez cette commande de combinaison:
la source
Si vous ne voulez pas apporter awk dans le jeu, une solution bash pure (t_str contient la chaîne formatée, t_sec le temps décodé en secondes):
la source
Vous ne spécifiez pas pour quel système d'exploitation il s'agit; s'il s'agit de Linux, et étant donné que vous êtes intéressé par la surveillance d'un processus spécifique, vous pourriez trouver plus intéressant d'analyser
/proc/$PROCID/stat
- voir laproc(5)
page de manuel pour plus de détails.la source