Creo que esto debería funcionar, para ilustrar el principio ...
#include <stdio.h>
int main(int argc, char *argv[]) {
argv[0][0] = 65;
sleep(10);
}
va a cambiar el nombre, y poner una "A" en lugar de la primera letra. CtrlZ para pausar, luego ejecute ps
para ver el nombre cambiado. No tengo ni idea, pero parece algo peligroso, ya que algunas cosas pueden depender de argv[0]
.
Además, traté de reemplazar el puntero a otra cadena; sin cigarro Por lo tanto, esto solo funcionaría con strcpy
y cadenas más cortas o iguales que el nombre original.
Puede o no haber una mejor manera de hacerlo. No lo sé.
EDIT: solución no literal: si está bifurcando, conoce el PID del niño (getpid()
en el niño, resultado de fork()
en el elemento principal). Solo déjelo en algún lugar donde pueda leerlo y mate al niño por PID.
otra solución no literal: haga enlaces 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.
procesos no tienen nombres –
Gracias Neil. Cuando miro dentro del Monitor de Sistemas, en realidad me muestra un nombre que es a lo que me refería. ¿Qué método usaría entonces? –
Sospecho que es el nombre de archivo del ejecutable que creó el proceso; no puede cambiar eso. –