Cambia il nome del processo senza cambiare argv in Linux

Devo modificare il nome del processo del mio programma in linguaggio C.
Sono preciso, questo non è il nome di un thread che voglio cambiare.
Voglio cambiare il nome del mio programma, ma l’unica soluzione che ho trovato è quella di modificare il valore di argv[0] .
Ho anche trovato un’altra soluzione con prctl(PR_SET_NAME, "newname") , ma questa soluzione non funziona.

Le differenze tra invocare prctl e modificare argv[0] sono:

  • modifica argv[0] modifica le informazioni in /proc/$pid/cmdline
  • invocando prctl(PR_SET_NAME) cambia le informazioni in /proc/$pid/status

Ciò significa che otterrai il nome della differenza del tuo processo di rilascio di ps -a e ps -ax .

Se si prevede lo stesso nome di processo per argomenti diversi durante l’esecuzione di ps, è ansible eseguirli entrambi (ad esempio, modificare argv[0] e invocare prctl ).

Spero che la risposta aiuti.

prova questo:

 char *process_name = "aaa\0"; memcpy((void *)argv[0], process_name, sizeof(process_name)); 

/ * spiega: lo spazio allocato per argv [0] potrebbe essere più piccolo del nome che vuoi dare e quindi dovrai sovrascrivere qualche altra memoria non correlata. la dimensione di argv [0] potrebbe essere solo 2 e se il tuo nome di processo è “averylongprocessname”, traboccherai argv [0]. Devi strlen (argv [0]) e usarlo in memcpy. thx @ecerulm

* /