Linux'ta pmap Komutu Nasıl Kullanılır

Yayınlanan: 2022-06-25
Bir bash istemi gösteren Linux dizüstü bilgisayar
fatmawati achmad zaenuri/Shutterstock.com

Bir Linux işleminin ne kadar RAM kullandığını bulmak, özellikle de paylaşılan belleğin dikkate alınması gerektiğinde basit bir mesele değildir. Neyse ki, pmap komutu her şeyi anlamanıza yardımcı olur.

Bellek Eşleme

Modern işletim sistemlerinde, her işlem kendi tahsis edilmiş bellek bölgesinde veya tahsis alanında yaşar. Tahsis edilen bölgenin sınırları, doğrudan fiziksel donanım adreslerine eşlenmez. İşletim sistemi, her işlem için bir sanal bellek alanı oluşturur ve sanal belleği fiziksel belleğe eşleyen bir soyutlama katmanı görevi görür.

Çekirdek, her işlem için bir çeviri tablosu tutar ve buna CPU tarafından erişilir. Çekirdek, belirli bir CPU çekirdeğinde çalışan işlemi değiştirdiğinde, işlemleri ve CPU çekirdeklerini birbirine bağlayan çeviri tablosunu günceller.

Soyutlamanın Faydaları

Bu şemanın faydaları vardır. Bellek kullanımı, kullanıcı alanındaki her işlem için bir şekilde kapsüllenmiştir ve korumalı alan içine alınmıştır. Bir işlem belleği yalnızca sanal bellek adresleri açısından "görür". Bu, yalnızca işletim sistemi tarafından verilen bellek ile çalışabileceği anlamına gelir. Paylaşılan bir belleğe erişimi olmadığı sürece, diğer işlemlere tahsis edilen belleğe ne bilir ne de erişimi vardır.

Linux'ta Swappiness Nedir? (ve Nasıl Değiştirilir)
İLGİLİ Linux'ta Takas Nedir? (ve Nasıl Değiştirilir)

Donanım tabanlı fiziksel belleğin sanal bellek adreslerine soyutlanması, çekirdeğin bazı sanal belleklerin eşlendiği fiziksel adresi değiştirmesine izin verir. Bir sanal bellek bölgesinin işaret ettiği gerçek adresi değiştirerek belleği diske değiştirebilir. Ayrıca, gerçekten gerekli olana kadar fiziksel bellek sağlamayı erteleyebilir.

Bellek okuma veya yazma isteklerine istenildiği gibi hizmet verildiği sürece, çekirdek eşleme tablosunu uygun gördüğü şekilde değiştirmekte özgürdür.

Talep Üzerine RAM

Eşleme tablosu ve “talep üzerine RAM” kavramı, paylaşılan hafıza olasılığını açar. Çekirdek, aynı şeyi belleğe bir kereden fazla yüklemekten kaçınmaya çalışacaktır. Örneğin, paylaşılan bir kitaplığı belleğe bir kez yükler ve onu kullanması gereken farklı işlemlerle eşler. İşlemlerin her biri, paylaşılan kitaplık için kendi benzersiz adresine sahip olacak, ancak hepsi aynı gerçek konuma işaret edecek.

Paylaşılan bellek bölgesi yazılabilirse, çekirdek, yazma üzerine kopyalama adı verilen bir şema kullanır. Bir işlem paylaşılan belleğe yazıyorsa ve bu belleği paylaşan diğer işlemlerin değişiklikleri görmemesi gerekiyorsa, yazma isteği noktasında paylaşılan belleğin bir kopyası oluşturulur.

Acemi Geek: Sanal Makineler Nasıl Oluşturulur ve Kullanılır
İLGİLİ Acemi Geek: Sanal Makineler Nasıl Oluşturulur ve Kullanılır

Aralık 2009'da yayınlanan Linux çekirdeği 2.6.32, Linux'a “Kernel SamePage Merging” adlı bir özellik verdi. Bu, Linux'un farklı adres alanlarındaki aynı veri bölgelerini algılayabileceği anlamına gelir. Tek bir bilgisayarda çalışan bir dizi sanal makine düşünün ve tüm sanal makineler aynı işletim sistemini çalıştırıyor. Paylaşılan bir bellek modeli ve yazma üzerine kopyalama kullanarak, ana bilgisayardaki ek yük büyük ölçüde azaltılabilir.

Bunların tümü, Linux'ta bellek işlemeyi karmaşık ve olabildiğince optimal hale getirir. Ancak bu karmaşıklık, bir sürece bakmayı ve bellek kullanımının gerçekte ne olduğunu bilmeyi zorlaştırır.

pmap Yardımcı Programı

Çekirdek, “/proc” sistem bilgisi sözde dosya sistemindeki iki sözde dosya aracılığıyla RAM ile yaptıklarının çoğunu açığa çıkarır. İşlem başına, her işlemin işlem kimliği veya PID'si için adlandırılan iki dosya vardır: "/proc/maps" ve "/proc//smaps."

pmap aracı bu dosyalardan bilgileri okur ve sonuçları terminal penceresinde görüntüler. pmap kullandığımızda ilgilendiğimiz sürecin pmap sağlamamız gerektiği açık.

İşlem Kimliğini Bulma

Bir sürecin PID'sini bulmanın birkaç yolu vardır. Örneklerimizde kullanacağımız önemsiz bir programın kaynak kodu burada. C ile yazılmıştır. Tek yaptığı terminal penceresine bir mesaj yazdırıp kullanıcının “Enter” tuşuna basmasını beklemektir.

 #include <stdio.h>

int ana(int argc, karakter *argv[])
{
  printf("Nasıl Yapılır Geek test programı.");
  getc(stdin);
} // ana bölümün sonu

Program, gcc derleyicisi kullanılarak pm adlı bir yürütülebilir dosyaya derlendi:

 gcc -o pm pm.c 

Örnek programın derlenmesi

Program, kullanıcının “Enter”a basmasını bekleyeceğinden, istediğimiz kadar çalışmaya devam edecektir.

 ./öğleden sonra 

Örnek programın çalıştırılması

Program başlatılır, mesajı yazdırır ve tuş vuruşunu bekler. Artık PID'sini arayabiliriz. ps komutu, çalışan işlemleri listeler. -e (tüm işlemleri göster) seçeneği, ps her işlemi listelemesini sağlar. Çıktıyı grep aracılığıyla aktaracağız ve adında "pm" olan girişleri filtreleyeceğiz.

 ps -e | grep pm 

Grep ile işlem kimliğini bulma

Bu, adlarının herhangi bir yerinde "pm" olan tüm girişleri listeler.

pidof komutunu kullanarak daha spesifik olabiliriz. Komut satırında ilgilendiğimiz işlemin adını pidof ve bir eşleşme bulmaya çalışıyor. Bir eşleşme bulunursa, pidof eşleştirme işleminin pidof yazdırır.

 pidof pm 

İşlem kimliğini bulmak için pidof kullanma

pidof yöntemi, işlemin adını bildiğinizde daha düzenlidir, ancak ps yöntemi, işlem adının yalnızca bir kısmını bilseniz bile çalışır.

pmap kullanma

Test programımız çalışırken ve PID'sini belirledikten sonra pmap'i şu şekilde kullanabiliriz:

 pmap 40919 

Örnek programda pmap çalıştırma

İşlemin bellek eşlemeleri bizim için listelenmiştir.

standart pmap çıktısı

İşte komutun tam çıktısı:

 40919: ./pm
000056059f06c000 4K r---- pm
000056059f06d000 4K rx-- pm
000056059f06e000 4K r---- pm
000056059f06f000 4K r---- pm
000056059f070000 4K rw--- pm
000056059fc39000 132K rw--- [ anon ]
00007f97a3edb000 8K rw--- [ anon ]
00007f97a3edd000 160K r---- libc.so.6
00007f97a3f05000 1616K rx-- libc.so.6
00007f97a4099000 352K r---- libc.so.6
00007f97a40f1000 4K ----- libc.so.6
00007f97a40f2000 16K r---- libc.so.6
00007f97a40f6000 8K rw--- libc.so.6
00007f97a40f8000 60K rw--- [ anon ]
00007f97a4116000 4K r---- ld-linux-x86-64.so.2
00007f97a4117000 160K rx-- ld-linux-x86-64.so.2
00007f97a413f000 40K r---- ld-linux-x86-64.so.2
00007f97a4149000 8K r---- ld-linux-x86-64.so.2
00007f97a414b000 8K rw--- ld-linux-x86-64.so.2
00007ffca0e7e000 132K rw--- [ yığın ]
00007ffca0fe1000 16K r---- [ anon ]
00007ffca0fe5000 8K rx-- [ anon ]
ffffffffff600000 4K --x-- [ anon ]
toplam 2756K

İlk satır, işlem adı ve PID'sidir. Diğer satırların her biri, eşlenmiş bir bellek adresini ve bu adresteki kilobayt cinsinden ifade edilen bellek miktarını gösterir. Her satırın sonraki beş karakterine sanal bellek izinleri denir. Geçerli izinler şunlardır:

  • r : Eşlenen bellek işlem tarafından okunabilir.
  • w : Eşlenen bellek işlem tarafından yazılabilir.
  • x : İşlem, eşlenen bellekte bulunan tüm talimatları yürütebilir.
  • s : Eşlenen bellek paylaşılır ve paylaşılan bellekte yapılan değişiklikler belleği paylaşan tüm işlemler tarafından görülebilir.
  • R : Bu eşlenen bellek için takas alanı için rezervasyon yok.

Her satırdaki son bilgi, eşleme kaynağının adıdır. Bu bir işlem adı, kitaplık adı veya yığın veya yığın gibi bir sistem adı olabilir.

Genişletilmiş Ekran

-x (genişletilmiş) seçeneği iki ekstra sütun sağlar.

 pmap -x 40919 

-X genişletilmiş seçeneğini pmap ile kullanma

Sütunlara başlıklar verilir. “Adres”, “Kbayt”, “Mod” ve “Eşleme” sütunlarını zaten gördük. Yeni sütunlara “RSS” ve “Kirli” adı verilir.

pmap genişletilmiş çıktı

İşte tam çıktı:

 40919: ./pm
Adres Kbytes RSS Kirli Mod Eşlemesi
000056059f06c000 4 4 0 r---- pm
000056059f06d000 4 4 0 rx-- pm
000056059f06e000 4 4 0 r---- pm
000056059f06f000 4 4 4 r---- pm
000056059f070000 4 4 4 rw--- pm
000056059fc39000 132 4 4 rw--- [ anon ]
00007f97a3edb000 8 4 4 rw--- [ anon ]
00007f97a3edd000 160 160 0 r---- libc.so.6
00007f97a3f05000 1616 788 0 rx-- libc.so.6
00007f97a4099000 352 64 0 r---- libc.so.6
00007f97a40f1000 4 0 0 ----- libc.so.6
00007f97a40f2000 16 16 16 r---- libc.so.6
00007f97a40f6000 8 8 8 rw--- libc.so.6
00007f97a40f8000 60 28 28 rw--- [ anon ]
00007f97a4116000 4 4 0 r---- ld-linux-x86-64.so.2
00007f97a4117000 160 160 0 rx-- ld-linux-x86-64.so.2
00007f97a413f000 40 40 0 ​​r---- ld-linux-x86-64.so.2
00007f97a4149000 8 8 8 r---- ld-linux-x86-64.so.2
00007f97a414b000 8 8 8 rw--- ld-linux-x86-64.so.2
00007ffca0e7e000 132 12 12 rw--- [ yığın ]
00007ffca0fe1000 16 0 0 r---- [ anon ]
00007ffca0fe5000 8 4 0 rx-- [ anon ]
ffffffffff600000 4 0 0 --x-- [ anon ]
---------------- ------- ------- ------- 
toplam kB 2756 1328 96
  • RSS : Bu yerleşik küme boyutudur . Yani, şu anda RAM'de bulunan ve değiştirilmeyen bellek miktarı.
  • Kirli : İşlem ve eşleme başladığından beri “Kirli” bellek değişti.

Bana her şeyi göster

-X (genişletilmişden daha fazla) çıktıya ek sütunlar ekler. Büyük "X" harfine dikkat edin. -XX adlı başka bir seçenek ( -X 'den bile fazla), pmap çekirdekten alabileceği her şeyi gösterir. -X , -XX bir alt kümesi olduğundan, -XX gelen çıktıyı açıklayacağız.

 pmap -XX 40919 

-XX'i kullanarak pmap ile bana her şeyi göster seçeneğini kullanın

Çıktı, bir terminal penceresinde korkunç bir şekilde sarılır ve pratik olarak çözülemez. İşte tam çıktı:

 40919: ./pm
         Adres İzni Ofset Aygıt Inode Boyutu KernelPageSize MMUPageSize Rss Pss Shared_Clean Shared_Dirty Private_Clean Private_Dirty Başvurulan Anonymous LazyFree AnonHugePages ShmemPmdMapped FilePmdMapped Shared_Hugetlb Private_Hugetlb Swaped Swapble VHPPs
    56059f06c000 r--p 00000000 08:03 393304 4 4 4 4 4 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 rd mr mw me dw sd pm
    56059f06d000 r-xp 00001000 08:03 393304 4 4 4 4 4 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me dw sd pm
    56059f06e000 r--p 00002000 08:03 393304 4 4 4 4 4 0 0 4 0 4 0 0 0 0 0 0 0 0 0 0 rd mr mw me dw sd pm
    56059f06f000 r--p 00002000 08:03 393304 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 rd mr mw me dw ac sd pm
    56059f070000 rw-p 00003000 08:03 393304 4 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 rw mr mw me dw ac sd pm
    56059fc39000 rw-p 00000000 00:00 0 132 4 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd [yığın]
    7f97a3edb000 rw-p 00000000 00:00 0 8 4 4 4 0 0 0 4 4 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd 
    7f97a3edd000 r--p 00000000 08:03 264328 160 4 4 160 4 160 0 0 0 160 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6
    7f97a3f05000 r-xp 00028000 08:03 264328 1616 4 4 788 32 788 0 0 0 788 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me sd libc.so.6
    7f97a4099000 r--p 001bc000 08:03 264328 352 4 4 64 1 64 0 0 0 64 0 0 0 0 0 0 0 0 0 0 rd mr mw me sd libc.so.6
    7f97a40f1000 ---p 00214000 08:03 264328 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 mr mw me sd libc.so.6
    7f97a40f2000 r--p 00214000 08:03 264328 16 4 4 16 16 0 0 0 16 16 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd libc.so.6
    7f97a40f6000 rw-p 00218000 08:03 264328 8 4 4 8 8 0 0 0 8 8 8 0 0 0 0 0 0 0 0 0 rd wr mr mw me ac sd libc.so.6
    7f97a40f8000 rw-p 00000000 00:00 0 60 4 4 28 28 0 0 0 28 28 28 0 0 0 0 0 0 0 0 0 0 rd mr mw me ac sd 
    7f97a4116000 r--p 00000000 08:03 264305 4 4 4 4 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 rd mr mw me dw sd ld-linux-x86-64.so.2
    7f97a4117000 r-xp 00001000 08:03 264305 160 4 4 160 11 160 0 0 0 160 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me dw sd ld-linux-x86-64.so.2
    7f97a413f000 r--p 00029000 08:03 264305 40 4 4 40 1 40 0 ​​0 0 40 0 ​​0 0 0 0 0 0 0 0 0 rd mr mw me dw sd ld-linux-x86-64.so.2
    7f97a4149000 r--p 00032000 08:03 264305 8 4 4 8 8 0 0 0 8 8 0 0 0 0 0 0 0 0 0 rd mr mw me dw ac sd ld-linux-x86-64.so.2
    7f97a414b000 rw-p 00034000 08:03 264305 8 4 4 8 8 0 0 0 8 8 0 0 0 0 0 0 0 0 0 0 rw mr mw me dw ac sd ld-linux-x86-64.so.2
    7ffca0e7e000 rw-p 00000000 00:00 0 132 4 4 12 12 0 0 0 12 12 12 0 0 0 0 0 0 0 0 0 rd wr mr mw me gd ac [yığın]
    7ffca0fe1000 r--p 00000000 00:00 0 16 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rd mr pf io de dd sd [vvar]
    7ffca0fe5000 r-xp 00000000 00:00 0 8 4 4 4 0 4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 rd ex mr mw me de sd [vdso]
ffffffffff600000 --xp 00000000 00:00 0 4 4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 eski [vsyscall]
                                             ==== ============================================== =================================================== ===== ============================================ === ================================= ======= ====== = ========== 
                                             2756 92 92 1328 157 1220 0 12 96 1328 96 0 0 0 0 0 0 0 0 0 0 KB 

Burada çok fazla bilgi var. Sütunların tuttuğu şey budur:

  • Adres : Bu eşlemenin başlangıç ​​adresi. Bu, sanal bellek adreslemesini kullanır.
  • Perm : Belleğin izinleri.
  • Offset : Bellek dosya tabanlıysa, bu eşlemenin dosya içindeki ofseti.
  • Cihaz : Büyük ve küçük sayılarla verilen Linux cihaz numarası. lsblk komutunu çalıştırarak bilgisayarınızda cihaz numaralarını görebilirsiniz.
  • Inode : Eşlemenin ilişkilendirildiği dosyanın düğümü. Örneğin, örneğimizde bu, pm programıyla ilgili bilgileri tutan düğüm olabilir.
  • Boyut : Bellek eşlemeli bölgenin boyutu.
  • KernelPageSize : Çekirdek tarafından kullanılan sayfa boyutu.
  • MMUPageSize : Bellek yönetim birimi tarafından kullanılan sayfa boyutu.
  • Rss : Bu yerleşik küme boyutudur . Yani, şu anda RAM'de bulunan ve değiştirilmeyen bellek miktarı.
  • Pss : Bu oransal paylaşım boyutudur . Bu, (paylaşılan boyut bölü pay sayısına) eklenen özel paylaşılan boyuttur.
  • Shared_Clean : Eşleme oluşturulduktan sonra değiştirilmeyen diğer işlemlerle paylaşılan bellek miktarı. Bellek paylaşılabilir olsa bile, gerçekten paylaşılmamışsa, yine de özel bellek olarak kabul edildiğini unutmayın.
  • Shared_Dirty : Eşleme oluşturulduktan sonra değiştirilen diğer işlemlerle paylaşılan bellek miktarı.
  • Private_Clean : Eşlemenin oluşturulmasından bu yana değiştirilmeyen özel bellek (diğer işlemlerle paylaşılmayan) miktarı.
  • Private_Dirty : Eşleme oluşturulduktan sonra değiştirilen özel bellek miktarı.
  • Başvurulan : Geçerli olarak başvurulan veya erişilen olarak işaretlenen bellek miktarı.
  • Anonim : Değiştirilecek bir aygıtı olmayan bellek. Yani, dosya destekli değil.
  • LazyFree : MADV_FREE olarak işaretlenmiş sayfalar. Bu sayfalar, içlerinde yazılı olmayan değişiklikler olsa bile, serbest bırakılmaya ve geri alınmaya uygun olarak işaretlenmiştir. Ancak, bellek eşlemesinde MADV_FREE ayarlandıktan sonra sonraki değişiklikler meydana gelirse, MADV_FREE bayrağı kaldırılır ve değişiklikler yazılana kadar sayfalar geri alınmaz.
  • AnonHugePages : Bunlar, dosya destekli olmayan “dev” bellek sayfalarıdır (4 KB'den büyük).
  • ShmemPmdMapped : Büyük sayfalarla ilişkili paylaşılan bellek. Tamamen bellekte bulunan dosya sistemleri tarafından da kullanılabilirler.
  • FilePmdMapped : Sayfa Orta Dizini, çekirdeğin kullanabileceği sayfalama şemalarından biridir. Bu, PMD girişlerinin işaret ettiği dosya destekli sayfaların sayısıdır.
  • Shared_Hugetlb : Çeviri Görünümü Tabloları veya TLB'ler, kullanıcı alanı bellek konumlarına erişmek için geçen süreyi optimize etmek için kullanılan bellek önbellekleridir. Bu rakam, paylaşılan devasa bellek sayfalarıyla ilişkili TLB'lerde kullanılan RAM miktarıdır.
  • Private_Hugetlb : Bu rakam, özel büyük bellek sayfalarıyla ilişkili TLB'lerde kullanılan RAM miktarıdır.
  • Swap : Kullanılan takas miktarı.
  • SwapPss : Takas orantılı paylaşım boyutu . Bu, takas edilen özel bellek sayfalarından oluşan takas miktarıdır (paylaşılan boyut bölü paylaşım sayısı).
  • Kilitli : İşletim sisteminin yığın veya yığın dışı belleği disk belleğine almasını önlemek için bellek eşlemeleri kilitlenebilir.
  • TH Uygun : Bu, eşlemenin şeffaf büyük sayfalar ayırmaya uygun olup olmadığını gösteren bir işarettir. 1 doğru, 0 yanlış anlamına gelir. Şeffaf büyük sayfalar, büyük miktarda RAM'e sahip bilgisayarlarda TLB sayfa aramalarının ek yükünü azaltan bir bellek yönetim sistemidir.
  • VmFlags : Aşağıdaki bayrak listesine bakın.
  • Eşleme : Eşleme kaynağının adı. Bu, bir işlem adı, kitaplık adı veya yığın veya yığın gibi sistem adları olabilir.

VmFlag'lar—sanal bellek bayrakları— aşağıdaki listenin bir alt kümesi olacaktır.

  • rd : Okunabilir.
  • wr : Yazılabilir.
  • Örn : Yürütülebilir.
  • sh : Paylaşıldı.
  • Bay : Okuyabilir.
  • mw : Yazabilir.
  • ben : Yürütebilir.
  • ms : Paylaşabilir.
  • gd : Yığın segmenti küçülür.
  • pf : Saf sayfa çerçeve numarası aralığı. Sayfa çerçeve numaraları, fiziksel bellek sayfalarının bir listesidir.
  • dw : Eşlenen dosyaya yazma devre dışı bırakıldı.
  • lo : Sayfalar bellekte kilitlidir.
  • io : Bellek eşlemeli G/Ç alanı.
  • sr : Sağlanan sıralı okuma önerisi ( madvise() işlevi tarafından).
  • rr : Rastgele okuma tavsiyesi sağlanır.
  • dc : İşlem çatallanmışsa bu bellek bölgesini kopyalamayın.
  • de : Yeniden eşleme sırasında bu bellek bölgesini genişletmeyin.
  • ac : Alan sorumludur.
  • nr : Swap alanı alan için ayrılmamıştır.
  • ht : Alan çok büyük TLB sayfaları kullanır.
  • sf : Senkron sayfa hatası.
  • ar : Mimariye özgü bayrak.
  • wf : İşlem çatallanmışsa bu bellek bölgesini silin.
  • dd : Bu bellek bölgesini çekirdek dökümlerine dahil etmeyin.
  • sd : Yumuşak kirli bayrak.
  • mm : Karma harita alanı.
  • hg : Büyük sayfa tavsiye bayrağı.
  • nh : Büyük sayfa tavsiye bayrağı yok.
  • mg : Birleştirilebilir tavsiye bayrağı.
  • bt : ARM64 önyargı sıcaklık kararsızlığı korumalı sayfa.
  • mt : ARM64 Bellek etiketleme uzantı etiketleri etkinleştirildi.
  • um : Userfaultfd eksik izleme.
  • uw : Userfaultfd wr-protect izleme.

Bellek Yönetimi Karmaşık

Ve gerçekte neler olduğunu anlamak için veri tablolarından geriye doğru çalışmak zordur. Ama en azından pmap size tam resmi verir, böylece bilmeniz gerekenleri bulmak için en iyi şansınız olur.

Örnek programımızın 16 KB'lık bir ikili yürütülebilir dosyaya derlendiğini ve yine de neredeyse tamamen çalışma zamanı kitaplıklarından dolayı 2756 KB'lık bir bellek kullandığını (veya paylaştığını) belirtmek ilginçtir.

Son bir temiz numara, işlemin PID'sini bulma ve onu pmap geçirme eylemlerini tek bir komutta birleştirerek, pmap ve pidof komutlarını birlikte kullanabilmenizdir:

 pmap $(pidof pm)