Saya mencoba menulis sebuah skrip yang dapat memantau penggunaan CPU suatu proses dalam suatu interval (untuk membuat grafik).
Sejauh ini, ini adalah perintah yang saya gunakan
ps -p $PROCID -o cputime,etimes
Satu-satunya kekhawatiran saya adalah bahwa output cputime tampaknya [dd]hh:mm
(atau sesuatu yang serupa, tidak bisa mengingat di atas kepala saya sekarang)
Apakah ada cara untuk memformat cputime dalam hitungan detik, seperti etime -> etimes untuk mendapatkan waktu yang berlalu dalam hitungan detik?
Sunting: Ini adalah keluaran yang saya terima saat ini
2-03:01:33 2653793
Saya ingin parameter pertama diformat dalam hitungan detik, bukan hari-jam: menit: detik.
bash
ps
text-formatting
dreadiscool
sumber
sumber
Jawaban:
Ini mengonversi pertama kali menjadi detik:
Sebagai contoh, perintah ps menghasilkan:
The
awk
perintah memproses itu dan kembali:Penjelasan
-F'[: ]+'
Ini memberitahu awk untuk memperlakukan titik dua dan spasi sebagai pemisah bidang. Dengan cara ini, jam, menit, dan detik muncul sebagai bidang terpisah.
/:/ {t=$3+60*($2+60*$1); print t,$NF}
Awal
/:/
membatasi kode untuk hanya bekerja pada baris yang menyertakan titik dua. Ini menghapus garis header. Jumlah detik dihitung dari jam, menit, detik melaluit=$3+60*($2+60*$1)
. Nilai yang dihasilkan untukt
kemudian dicetak bersama dengan waktu yang telah berlalu.Hari-hari penanganan
Jika
ps
menghasilkan hari, jam, menit, detik, seperti pada:Kemudian, gunakan kode ini sebagai gantinya:
Jika berhari-hari mungkin atau tidak bergantung pada output, maka gunakan perintah kombinasi ini:
sumber
Jika Anda tidak ingin membawa awk dalam game, solusi bash murni (t_str berisi string yang diformat, t_sec waktu yang diterjemahkan dalam hitungan detik):
sumber
Anda tidak menentukan sistem operasi untuk apa ini; jika itu adalah Linux, dan mengingat Anda tertarik untuk memantau proses tertentu, Anda mungkin merasa lebih bermanfaat untuk menguraikan
/proc/$PROCID/stat
- lihatproc(5)
halaman manual untuk detailnya.sumber