Alors là je suis fier de mon jeu de mot. Vraiment, hein..

Bon bah juste une petite news de rien : on remarque souvent qu'avec ps on a des résultats un peu chelous, voire parfois carrément aberrants, en terme d'utilisation de la mémoire. Y'a plusieurs raisons à ça. On regarde l'occupation mémoire d'un process via ps puis pmap :

$ ps -FC Thunar
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
poz       5426  5414  0  3409  4720   0 Aug26 ?        00:00:00 Thunar --sm-client-id 117f000101000118510838300000138390002 --daemon

Soit en gros 4M de RAM utilisée

$ pmap -d `pidof Thunar`
Address   Kbytes Mode  Offset           Device    Mapping
08048000     480 r-x-- 0000000000000000 008:00002 Thunar
080c0000       8 rw--- 0000000000077000 008:00002 Thunar
080c2000     260 rw--- 00000000080c2000 000:00000   [ anon ]
b727d000      64 r---- 0000000000000000 008:00002 Thunar.mo
b728d000      28 r---- 0000000000000000 008:00002 libexo-0.3.mo
[...]
b7eed000     100 r-x-- 0000000000000000 008:00001 ld-2.5.so
b7f06000       8 rw--- 0000000000019000 008:00001 ld-2.5.so
bff52000      84 rw--- 00000000bff52000 000:00000   [ stack ]
ffffe000       4 r-x-- 0000000000000000 000:00000   [ anon ]
mapped: 13640K    writeable/private: 792K    shared: 84K
$

On remarque que des segments de code sont comptés plusieurs fois (un segment pour la lecture, un pour l'exec, avec recouvrement). Bref, ça confirme juste ce qu'on sait déjà : ps se contente paresseusement d'afficher la quantité théorique maximale de mémoire utilisée (avec certains bouts de code en double, qui plus est), alors que les libs partagées sont pas exclusivement réservées à ce process... Bref, la "vraie" mémoire est indiquée en bas de l'output, "writeable/private: 792K".

$ cat > ~/bin/mem.sh
#!/bin/bash

function usage()
{
        echo "Usage: $(basename $0) PROCESS..."
        echo "display the (real) memory usage of processes"
}

if [ "$#" = "0" ]
then    usage
        exit 0
fi

OUT=
echo "memory usage:"

for i in $*
do
        OUT=$(pidof $i | cut -d' ' -f1)
        if [ "$OUT" = "" ]
        then    echo "[-] process '$i' does not exist"
        else    OUT2=$(pmap -d $OUT | grep private | awk '{print $4}')
                echo "[+] ${i} (pid ${OUT}): $OUT2"
        fi
done
^D
$ chmod +x ~/bin/mem.sh
$ shebang.sh ~/bin/mem.sh
$ mem.sh X firefox-bin ssh prout
memory usage:
[+] X (pid 4965): 415736K
[+] firefox-bin (pid 5582): 295068K
[+] ssh (pid 5580): 796K
[-] process 'prout' does not exist
$

Pour shebang.sh, cf. un commentaire ailleurs :)

Je sais pas trop sur les *BSD si pmap est dispo... feedback ? Pfff, 3:05 du mat', je vais être frais au taff, encore.