2015-07-31 12 views
5

Attualmente sto cercando di cambiare il nome del processo di un processo in modo da poter leggere più facilmente con htop, top, .... Voglio LD_PRELOAD questo codice in un altro processo in modo viene rinominato da una variabile environmt.Cambia il nome del processo reale in C su Linux

ho trovato un sacco di roba in internet, ma nulla funziona:

prctl(PR_SET_NAME, "Test"); 

Questo non funziona perché htop non sta onorando il nome.

Nginx setproctitle (Link) non funziona bene, perché toglie i parametri (che sono necessari al processo).

Ho provato tutto ciò che ho trovato e ora sono fuori dalle idee.

Ciò è possibile anche in linux? E come?

+0

Hai sicuramente bisogno di risolvere questo usando il codice C? – Useless

+0

Userei qualsiasi altra lingua se può produrre file .so che possono essere precaricati. –

+0

Quindi il problema originale è come cambiare il nome di un processo? E la prima soluzione è scrivere un .so LD_PRELOAD per raggiungere questo obiettivo? Se comprendo correttamente la configurazione del sistema, potrebbe esserci una soluzione più semplice che non richiede né il file .so né LD_PRELOAD. – Useless

risposta

7

Basta eseguire il programma da script di shell o il vostro programma attraverso exec e passare il nome desiderato come argv[0]:

#/bin/bash 
exec -a fancy_name a.out ... 

o C/C++:

execl("./a.out", "fancy_name", ...); 
+0

La domanda riguarda 'C++' e non 'bash' o in esecuzione. –

+0

Vero, ma sembra un problema X-Y. Chiediamo! – Useless

+0

@VictorPolevoy Credo che OP voglia risolvere questo problema con C perché non sa che esiste una soluzione più semplice con shell. Comunque è fatto molto simile al codice C/C++, ho aggiunto quell'esempio. – Slava

4
#include <stdio.h> 
#include <string.h> 
#include <unistd.h> 
#define NEW_NAME "hello_world" 
int main(int argc, char **argv) { 
    if(strcmp(argv[0], NEW_NAME)) { 
    argv[0] = NEW_NAME; 
    execv("/proc/self/exe", argv); 
    fputs("exec failed", stderr); 
    return 1; 
    } 
    while(1) // so it goes to the top 
    ; 
} 
Problemi correlati