Latar Belakang: Saya bermain-main dengan memonitor ulimit untuk menjalankan proses untuk pengguna tertentu. (Saya sesekali melihat proses yang memulai dengan batas yang salah.) Saya bertanya pada beberapa guru Linux yang mengaku diri sendiri, dan yang satu menyarankan lsof -p <pid>
, sementara yang lain menyarankan ls /proc/<pid>/fd
, tetapi tidak ada yang positif tentang yang lebih akurat mencerminkan jumlah aktual menuju maks. buka file batas untuk suatu proses.
Jadi, mana yang benar?
lsof -p <pid> | wc -l
Atau
ls /proc/<pid>/fd | wc -l
Tolong jelaskan perbedaannya. Terima kasih!
lsof
halaman manual, dan sementara saya menduga jawabannya adalah file yang dipetakan dengan memori, saya ingin konfirmasi orang yang lebih berpengalaman.Jawaban:
lsof
juga akan memberi Anda memori .so-file yang dipetakan - yang secara teknis tidak sama dengan file yang dikendalikan aplikasi./proc/<pid>/fd
adalah titik pengukuran untuk deskriptor file terbuka - namun: Disebutkan di halaman proc-man - jika utas utama dari program multithread telah diakhiri, direktori ini tidak akan tersedia.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
akan menampilkan barang yang sama dengan Andals /proc/<pid>/fd | wc -l
.Peta memori tersedia di
/proc/<pid>/maps
.sumber
lsof
memberi Anda output yang hampir sama, tetapi juga termasukcwd
,rtd
dantxt
file deskriptor.COMMAND
danPID
dapat bervariasi. Ganti spasi dengan[[:space:]]*
agar lebih umum.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
sini , sedangkanlsof
di Android shell (adb shell
) tidak mendukung-a
dan-d
. Jadi saya akhirnya menggunakan versi Kvisle.