Bonne question : comment on fait pour changer le nom d'un process (visible via ps ou /proc). Par exemple, au lieu d'avoir la commande nginx on voit "nginx: worker process".
Sur cette page, ils disent comment faire en modifiant directement dans argv… ça fonctionne mais ça a l'air crade est pas très souple.
D'ailleurs pour se marrer on peut le faire avec gdb (une fois à un breakpoint) :
(gdb) p argv[0]
$3 = 0x7fffffffe5cf "/home/john/code/a.out"
(gdb) set {char}0x7fffffffe5cf = 'a'
Là ça modifie bien /proc/<pid>/cmdline et ps… mais on ne peut pas par exemple malloc et remplir une string et la poser en argv[0] : ça fait juste rien.
Il y a apparemment prctl (voir https://github.com/electrum/procname) mais ça ne fonctionne que avec "c" comme argument à ps.
J'ai regardé dans les sources de nginx, ils expliquent bien… mais ça sent le gros gros hack :P
https://github.com/nginx/nginx/blob/branches/default/src/os/unix/ngx_setproctitle.c
En tous cas ça fonctionne avec gdb…
(gdb) b main
(gdb) r lala
(gdb) set argv[1] = 0x0
(gdb) p argv[0]
$1 = 0x7fffffffe5ca "/home/john/code/a.out"
(gdb) p strcpy($1, "coucou coincoin lala pouet trucmuche")