Necesito modificar el nombre de proceso de mi programa en lenguaje C.
Yo precisos, este no es el nombre de un hilo que quiero cambiar.
Quiero cambiar el nombre de mi programa, pero la única solución que he encontrado, es modificar el valor de argv[0].
También he encontrado otra solución con prctl(PR_SET_NAME, "newname"), pero esta solución no funciona.

posibles duplicados de como nombre de un hilo en Linux?
«La documentación dice PR_SET_NAME establece el nombre de proceso; pero que en la documentación que está mal, pues en realidad el nombre del hilo. Ahora «arriba» y «ps -L» mostrar el nombre del hilo.»user9876 Abr 22 ’09 a las 17:39
PR_SET_NAME bandera es compatible desde Linux kernel 2.6.9

OriginalEl autor Jérémy Magrin | 2013-04-23

2 Comentarios

  1. 19

    Las diferencias entre la invocación de prctl y modificar argv[0] son:

    • modificar argv[0] información de los cambios en /proc/$pid/cmdline
    • invocando prctl(PR_SET_NAME) información de los cambios en /proc/$pid/status

    Que significa que usted conseguirá diferencia nombre de su proceso de emisión de ps -a y ps -ax.

    Si usted espera que el mismo nombre de proceso para los diferentes argumentos, mientras que la ejecución de ps, usted puede hacer los dos (es decir, cambiar argv[0] e invocar prctl).

    Espero que la respuesta te ayuda.

    OriginalEl autor Wayne

  2. -1

    intente esto:

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

    /*
    explicar:
    El espacio asignado para argv[0] podría ser más pequeño que el nombre que desea asignar y, a continuación, usted será overwritting algunos otros no relacionados de memoria. argv[0] tamaño podría ser sólo 2 y si el nombre del proceso es «averylongprocessname» va a ser desbordante argv[0]. Usted necesita strlen(argv[0]) y el uso que en memcpy.
    thx @ecerulm

    */

    Creo que el \0 es innecesario – ¿no es ya en silencio anexa a una cadena literal de caracteres?
    es cierto que para strcpy, no para memcpy.
    Parece que usted tiene que sobreescribir todos los caracteres de origen argv[0], es cierto? Así que usted no puede tener nombres de proceso más grande que el nombre original
    El espacio asignado para argv[0] podría ser menor que el nombre que desea asignar y, a continuación, usted será overwritting algunos otros no relacionados de memoria. argv[0] tamaño podría ser sólo 2 y si el nombre del proceso es «averylongprocessname» va a ser desbordante argv[0]. Usted necesita strlen(argv[0]) y el uso que en memcpy.
    El \0 es innecesario. También, sizeof es incorrecto aquí, ya que devuelve el tamaño de un puntero (normalmente 4 o 8 bytes). Quieres algo más como strncpy(argv[0], process_name, strlen(process_name) o memcpy(argv[0], process_name, (strlen(argv[0]) < strlen(process_name)+1) ? strlen(argv[0]) : strlen(process_name)+1)

    OriginalEl autor LingYFH

Dejar respuesta

Please enter your comment!
Please enter your name here