Terminar el proceso que se ejecuta dentro de valgrind


Matar el proceso valgrind en sí no deja ningún informe sobre la ejecución del proceso interno.

¿Es posible enviar una señal de terminación a un proceso que se ejecuta dentro de valgrind?

 26
Author: Antonio Pérez, 2011-09-06

1 answers

No hay un "proceso interno" ya que tanto el propio valgrind como el programa cliente que está ejecutando se ejecutan en un solo proceso.

Las señales enviadas a ese proceso se entregarán al programa cliente de forma normal. Si la señal hace que el proceso se terinice, los controladores de salida normales de valgrind se ejecutarán y (por ejemplo) informarán de cualquier fuga.

Así que, por ejemplo, si iniciamos valgrind en un comando sleep:

bericote [~] % valgrind sleep 240
==9774== Memcheck, a memory error detector
==9774== Copyright (C) 2002-2010, and GNU GPL'd, by Julian Seward et al.
==9774== Using Valgrind-3.6.1 and LibVEX; rerun with -h for copyright info
==9774== Command: sleep 240
==9774== 

Luego mata ese comando:

bericote [~] % kill -TERM 9774

Entonces el proceso saldrá y los controladores de salida de valgrind se ejecutarán:

==9774== 
==9774== HEAP SUMMARY:
==9774==     in use at exit: 0 bytes in 0 blocks
==9774==   total heap usage: 30 allocs, 30 frees, 3,667 bytes allocated
==9774== 
==9774== All heap blocks were freed -- no leaks are possible
==9774== 
==9774== For counts of detected and suppressed errors, rerun with: -v
==9774== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 6 from 6)
[1]    9774 terminated  valgrind sleep 240

La única excepción sería para kill -9 ya que en ese caso el proceso es asesinado por el núcleo sin ser informado de la señal, por lo que valgrind no tiene oportunidad de hacer nada.

 26
Author: TomH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-06 21:45:19