Saya mencoba untuk menulis perintah yang menyalurkan output terus-menerus dari perintah bebas (jalankan setiap detik) ke perintah awk yang mem-parsing nilai tertentu (memori bebas yang tersedia) dan menampilkan ini ke file dengan timestamp. Berikut adalah upaya saya saat ini pada perintah:
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 }' >>memOut
Atau sebagai alternatif, setelah sedikit Googling
free -mto -s 1 | awk '/Mem/ { print strftime("%r") "," $4 >>"memOut"}'
Setiap proses menghasilkan file kosong. Ada saran atau metode yang mungkin berbeda?
Untuk versi lama
awk
Anda mungkin harus menggunakansystem("")
.Sebenarnya,
fflush(stdout)
ini hanya untuk versi terbaruawk
dangawk
, sebagai satu-satunya dalam standar POSIX sejak Desember 2012.Perhatikan bahwa menggunakan
system("")
flushes setiap deskriptor file, deskripsi lengkapnya ada digawk
manual, bagian "9.1.4 Fungsi Input / Output".sumber
Hanya untuk memastikan bahwa Anda mendapatkan apa yang sebenarnya Anda inginkan dan bukan apa yang Anda minta secara spesifik.
Jika Anda ingin mengetahui memori yang tersedia pada sistem untuk program maka ini mungkin lebih cocok:
Kolom Digunakan baris Mem mencakup cache dan buffer dan dalam kebanyakan kasus ketika Anda ingin memantau penggunaan memori untuk komputer / tugas tertentu, setidaknya harus diperhatikan.
sumber
Pada versi tertentu
awk
(mis. Mawk 1.3.3), Anda perlu menambahkan-W interactive
flag baris perintah untuk mengaktifkan operasi tanpa gangguan dengan pipa.sumber