La manipulation du nom dans la liste des processus est une pratique courante. Par exemple. J'ai dans mon processus la liste suivante :
root      9847  0.0  0.0  42216  1560 ?        Ss   Aug13   8:27 /usr/sbin/dovecot -c /etc/dovecot/d
root     20186  0.0  0.0  78880  2672 ?        S    Aug13   2:44  \_ dovecot-auth
dovecot  13371  0.0  0.0  39440  2208 ?        S    Oct09   0:00  \_ pop3-login
dovecot   9698  0.0  0.0  39452  2640 ?        S    Nov07   0:00  \_ imap-login
ericb     9026  0.0  0.0  48196  7496 ?        S    Nov11   0:00  \_ imap [ericb 192.168.170.186]
Dovecot utilise ce mécanisme pour montrer facilement ce que fait chaque processus.
 C'est fondamentalement aussi simple que de manipuler le argv[0] paramètre en C. argv est un tableau de pointeurs vers les paramètres avec lesquels le processus a été lancé. Donc une commande ls -l /some/directory aura :
argv[0] -> "ls"
argv[1] -> "-l"
argv[2] -> "/some/directory"
argv[3] -> null
 En allouant de la mémoire, en mettant du texte dans cette mémoire, puis en mettant l'adresse de cette mémoire dans argv[0] le nom du processus affiché aura été modifié avec le nouveau texte.
Changer argv[] n'est pas portable. Sous Linux, vous ne pouvez pas non plus simplement modifier argv[0] pour pointer vers une chaîne plus longue. Vous devrez écraser les arguments existants et veiller à ne pas écraser les variables d'environnement qui suivent dans l'espace d'adressage.
libbsd fournit une implémentation de setproctitle(3) pour Linux qui rend cela beaucoup plus facile.
Il existe deux manières standard Linux de le faire, dont l'une provient de la glibc et peut être portable sur d'autres systèmes non Linux :
- glibc pthread_setname_np()est probablement la meilleure méthode
- Linux prctl()fonctionne aussi
 Il est possible que la modification de argv[0] fonctionnait auparavant, mais au moins sur mon système Linux actuel, cela ne fait rien à la sortie en ps .
Voir cette réponse pour plus de détails et un exemple de code :https://stackoverflow.com/a/55584492/737303