Contamos con tu apoyo para compartir nuestros artículos acerca de las ciencias de la computación.
Solución:
Creo que esto debería funcionar, para ilustrar el principio…
#include
int main(int argc, char *argv[])
argv[0][0] = 65;
sleep(10);
cambiará el nombre, y pondrá una “A” en lugar de la primera letra. CtrlZ para pausar, luego ejecutar ps
para ver el nombre cambiado. No tengo idea, pero parece algo peligroso, ya que algunas cosas pueden depender de argv[0]
.
Además, intenté reemplazar el puntero por otro string; sin cigarro Entonces esto solo funcionaría con strcpy
y cadenas más cortas o iguales que el nombre original.
Podría o no haber una mejor manera para esto. No sé.
EDITAR: solución no literal: si está bifurcando, conoce el PID del niño (getpid()
en el niño, resultado de fork()
en el padre). Simplemente envíelo a algún lugar donde pueda leerlo y mate al niño por PID.
otra solución no literal: haga enlaces suaves al ejecutable con otro nombre (ln -s a.out kill_this_a.out
), luego, cuando ejecute, ejecute el enlace. El nombre será el nombre del enlace.
Según este comentario, prctl(PR_SET_NAME)
solo afecta el “nombre corto” de un hilo. Tiene el mismo efecto que escribir en /proc/self/comm
.
Para cambiar el “nombre largo” (/proc/self/cmdline
que en realidad es utilizado por htop
y ps u
) necesitas un truco feo (que se menciona en ese comentario pero el enlace está muerto). Puede encontrar un ejemplo de este tipo de piratería en el código fuente de Chromium: https://cs.chromium.org/chromium/src/services/service_manager/embedder/set_process_title_linux.cc?sq=package:chromium&g=0
Tienes la opción de animar nuestro estudio ejecutando un comentario y dejando una puntuación te damos la bienvenida.