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

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top