Bu, ilk kez saniyeye dönüştürür:
ps -p $PROCID -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
Örnek olarak ps komutu şunu üretir:
$ ps -p 5403 -o cputime,etimes
TIME ELAPSED
01:33:38 1128931
awk
Komut olduğunu ve iadeler işler:
ps -p 5403 -o cputime,etimes | awk -F'[: ]+' '/:/ {t=$3+60*($2+60*$1); print t,$NF}'
5618 1128931
açıklama
-F'[: ]+'
Bu, awk'ye hem kolonlara hem de boşluklara alan ayırıcılar olarak davranmasını söyler. Bu şekilde, saat, dakika ve saniye ayrı alanlar olarak görünür.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
İlk /:/
harf, kodun yalnızca iki nokta üst üste içeren satırlarda çalışmasını kısıtlar. Bu başlık satırlarını kaldırır. Saniye sayısı, saat, dakika, saniye ile üzerinden hesaplanır t=$3+60*($2+60*$1)
. Sonuçta elde edilen değer t
daha sonra geçen süre boyunca yazdırılır.
Taşıma günleri
Aşağıdaki gibi ps
günler, saatler, dakikalar, saniyeler üretirse:
2-03:01:33
Ardından, bunun yerine şu kodu kullanın:
ps -p $PROCID -o cputime,etimes | awk -F'[-: ]+' '/:/ {t=$4+60*($3+60*($2+24*$1)); print t,$NF}'
Çıktıya gün eklenebilir veya eklenmeyebilirse, bu kombinasyon komutunu kullanın:
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}'