Estoy intentando ejecutar algún código de inicio en todos los procesos a través del vinculador dinámico.
El código debería hacer cosas basadas en el argumento cero del proceso. Obtengo los argumentos de /proc/self/cmdline
(si conoce una mejor manera de acceder a ellos fuera de main, infórmelo), sin embargo, esto tiene un problema:
Los scripts obtienen su shebang (sin #!
) como argumento cero y en ese caso me interesa el siguiente argumento. Pero ¿cómo puedo diferenciar los procesos interpretados de los nativos?
Respuesta1
El detalle del que está extrayendo /proc/self/status
se encuentra en /proc/self/comm
(sin secuencias de comandos).
Para la pregunta prevista: determinar qué procesos soninterpretadoy cuales sonnativo, no puede hacer esto sin saber qué procesos están destinados a serintérpretes. Después de todo, cualquier proceso puede cambiar su nombre mediante una exec
llamada, usando lo que quiera en la lista de argumentos del proceso resultante. Tú podríasadivinarcomparando /proc/self/exe
(que apunta al ejecutable) con la lista de argumentos, pero eso sería solo una suposición, ya que hay ejemplos en los que un no intérprete cambia el nombre de sus descendientes solo para que su uso sea más evidente.
Otras lecturas:
Respuesta2
Parece que los procesos Name
entran
</proc/self/status |grep '^Name'
y el nombre parece ser el basename
del argumento cero real.
(Mantendré la pregunta aquí en caso de que alguien dé una mejor respuesta).