2011-09-06 2 views

Répondre

26

Il n'y a pas de "processus interne" puisque le programme client s'exécute en même temps.

Les signaux envoyés à ce processus seront remis au programme client normalement. Si le signal provoque le terinate, alors les gestionnaires de sortie normaux de valgrind s'exécuteront et (par exemple) signaleront des fuites.

Ainsi, par exemple, si nous commençons à valgrind sur une commande de sommeil:

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== 

tuer alors cette commande:

bericote [~] % kill -TERM 9774 

alors le processus sortir et les gestionnaires de sortie de valgrind se déroulera:

==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 seule exception serait pour kill -9 comme dans ce cas le pro Le noyau est tué par le noyau sans jamais être informé du signal, donc Valgrind n'a aucune possibilité de faire quoi que ce soit.

+1

J'ai essayé 'kill -SIGTERM' avant de le demander, mais cela prenait un temps très long pour que valgrind s'arrête (~ 10 min.), Donc je pensais que ça ne marcherait pas. Merci pour votre réponse. –

+0

Le délai est-il le balayage de toute la mémoire allouée essayant de fonctionner s'il y a des fuites - cela peut prendre plus longtemps que normal parce qu'un programme en cours d'exécution est susceptible d'avoir plus de mémoire allouée qu'un normalement. – TomH

+6

Cela n'est pas vrai sous OS X 10.7.5 et valgrind-3.8.1. valgrind sera heureux d'ignorer la mort. –

Questions connexes