• [^] # Re: intéressant

    Posté par . En réponse au journal wait4: attendre la fin d’un ou plusieurs processus quelconques. Évalué à 4.

    C’est le comportement voulu

    Oula je plane, en effet.

    Sinon, deux autres remarques :
    - la version avec polling a une race, si jamais le PID est recyclé entre deux polling. Une alternative serait par exemple d'ouvrir /proc//status, et de faire un read() régulièrement: si jamais le processus est mort entre temps, tu vas prendre ESRCH. Mais bon, ce n'est pas portable, et il y a déjà netlink pour Linux.
    - le socket netlink reçoit un message par fork()/exec()/exit(), pour tous les process sur la machine: s'il beaucoup de process sont créés, le socket buffer risque de se remplir.
    Démo:

    shell 1:

    $ while [ 1 ]; do /bin/false; done
    
    

    shell 2:

    # nice -n 19 strace ./wait4 1
    [...]
    recv(3, "L0円0円0円3円0円0円0円261円252円\t0円0円0円0円0円1円0円0円0円1円0円0円0円261円252円\t0円0円0円0円0円"..., 76, 0) = 76
    recv(3, "L0円0円0円3円0円0円0円262円252円\t0円0円0円0円0円1円0円0円0円1円0円0円0円262円252円\t0円0円0円0円0円"..., 76, 0) = 76
    recv(3, 0xbfa7a324, 76, 0) = -1 ENOBUFS (No buffer space available)
    
    

    Tu devrais pouvoir mettre en place un filtre pour ne recevoir que les notifications d'intérêt, c'est pas trivial (BPF) mais ça peut être intéressant ;-)