Obteniendo la invocación del comando original de /proc/self

Obteniendo la invocación del comando original de /proc/self

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/statusse 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 execllamada, 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 Nameentran

</proc/self/status |grep '^Name'

y el nombre parece ser el basenamedel argumento cero real.

(Mantendré la pregunta aquí en caso de que alguien dé una mejor respuesta).

información relacionada