Cela convertit la première fois en secondes:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Par exemple, la commande ps produit:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
La awk
commande traite cela et retourne:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
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 via t=$3+60*($2+60*$1)
. La valeur résultante pour t
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:
2-03:01:33
Utilisez ensuite ce code à la place:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Si des jours peuvent ou non être ajoutés à la sortie, utilisez cette commande de combinaison:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ && NF==5 { t=$4+60*($3+60*($2+24*$1)); print t,$NF} /:/ && NF==4 {t=$3+60*($2+60*$1); print t,$NF}'