Impostazione del thread / proc / PID / cmdline?
-
02-07-2019 - |
Domanda
Su Linux / NPTL , i thread vengono creati come una sorta di processo.
Vedo che alcuni dei miei processi hanno una strana cmdline:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
Hai idea di come potrei farlo per ogni thread del mio processo? Sarebbe molto utile per il debug.
/ me ora sto indagando sulla fonte HAL
grazie
Soluzione
Se vuoi farlo in modo portatile, qualcosa che funzionerà su più varianti Unix, ci sono pochissime opzioni disponibili.
Quello che devi fare è che il tuo processo chiamante deve chiamare exec con l'argomento argv [0]
che punta al nome che vorresti vedere nell'output del processo e il nome del file che punta a l'eseguibile effettivo.
Puoi provare questo comportamento dalla shell usando:
exec -a "This is my cute name" bash
Questo sostituirà l'attuale processo bash con uno chiamato " Questo è il mio bel nome "
.
Per fare ciò in C, puoi guardare il codice sorgente di sendmail
o qualsiasi altro software che è stato ampiamente portato e trovare tutte le variazioni che sono necessarie tra i sistemi operativi per supportare questo .
Alcuni sistemi operativi dispongono di un'API setproctitle (3)
, altri consentono di sovrascrivere il contenuto di argv [0]
e mostrare quel risultato.
Altri suggerimenti
argv
punta a stringhe scrivibili. Basta scrivere cose per loro:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
Bah .. il codice non è così carino, il trucco è riutilizzare il puntatore ambi (qui argv_buffer):
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
Qualche idea migliore?
Funziona con thread diversi?