Volcado de núcleo: cómo determinar la versión de la aplicación bloqueada

Necesito vincular estrictamente todos los files del núcleo generados por el sistema a cierta versión bin de la aplicación bloqueada. Puedo especificar el patrón core-name en sysctl.conf: kernel.core_pattern, pero no hay forma de poner la versión bin aquí.

¿Cómo puedo poner la versión del progtwig bloqueado en el file central (número de revisión) o de otra forma para determinar la versión del contenedor bloqueado?

Estoy usando la variable qmake VERSION en el file .pro, que contiene el número de revisión de SVN. Está disponible por QCoreApplication :: applicationVersion (), en todos mis contenedores por indicador –version.

Suponiendo que su aplicación puede llegar lo suficientemente lejos como para imprimir su número de versión sin un volcado del núcleo, puede escribir un pequeño progtwig (python probablemente sería más fácil) que es invocado por un volcado del núcleo. El progtwig leería stdin, lo colocaría en un file y luego cambiaría el nombre del file en function del número de versión.

De hombre 5 núcleo:

  Volcado de núcleos de tuberías a un progtwig
        Desde kernel 2.6.19, Linux admite una syntax alternativa para
        / proc / sys / kernel / core_pattern file.  Si el primer personaje de este
        file es un símbolo de tubería (|), luego el rest de la línea es inter-
        presentado como un progtwig para ser ejecutado.  En lugar de estar escrito en un disco
        file, el volcado del núcleo se da como input estándar al progtwig.  Nota
        los siguientes puntos:

        * El progtwig debe especificarse usando un nombre de ruta absoluto (o una ruta de acceso
           nombre relativo al directory raíz, /), y debe seguir inmediatamente
           el '|'  personaje.

        * El process creado para ejecutar el progtwig se ejecuta como usuario y grupo raíz.

        * Los arguments de la command-line se pueden suministrar al progtwig (ya que Linux
           2.6.24), delimitado por espacios en blanco (hasta una longitud de línea total de 128
           bytes).

        * Los arguments de command-line pueden include cualquiera de los% especificadores
           listdos arriba.  Por ejemplo, para pasar el PID del process que es
           siendo object de dumping, especifique% p en un argumento.

Si llama a su script / usr / local / bin / dumper, entonces

echo "| /usr/local/bin/dumper %E" > /proc/sys/kernel/core_pattern 

El dumper debe copyr stdin a un file, luego intente ejecutar el progtwig nombrado en su línea de command para extraer un número de versión y usarlo para cambiar el nombre del file.

Algo como esto podría funcionar (no lo he probado, así que úselo con un riesgo extremo 🙂

 #!/usr/bin/python import sys,os,subprocess from subprocess import check_output CORE_FNAME="/tmp/core" with open(CORE_FNAME,"f") as f: while buf=sys.stdin.read(10000): f.write(buf) pname=sys.argv[1].replace('!','/') out=subprocess.check_output([pname, "--version"]) version=out.split('\n')[0].split()[-1] os.rename(CORE_FNAME, CORE_FNAME+version) 

El riesgo realmente grande de hacer esto son los volcados de núcleo recursivos que pueden bloquear su sistema. Asegúrese de utilizar ulimit para permitir solo los volcados de núcleo de los processs que pueden imprimir sus propias versiones sin volcado de núcleo.

Sería una buena idea cambiar el script para volver a ejecutar el progtwig y get la información de la versión solo si es el progtwig que está esperando.