Завершить процесс внутри Valgrind - PullRequest
29 голосов
/ 06 сентября 2011

Уничтожение самого процесса valgrind не оставляет отчета о выполнении внутреннего процесса.

Можно ли отправить сигнал завершения процессу, выполняющемуся внутри valgrind?

1 Ответ

29 голосов
/ 07 сентября 2011

Не существует "внутреннего процесса", так как и сам valgrind, и клиентская программа, которую он запускает, выполняются в одном процессе.

Сигналы, отправленные этому процессу, будут доставлены клиентской программе в обычном режиме.Если сигнал вызывает завершение процесса, тогда будут работать обычные обработчики выхода valgrind и (например) сообщать о любых утечках.

Так, например, если мы запустим valgrind по команде сна:

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

затем убейте эту команду:

bericote [~] % kill -TERM 9774

, затем процесс завершится и запустятся обработчики выхода valgrind:

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

Единственное исключение будет для kill -9, как в этомв случае, если процесс убит ядром, даже не будучи проинформированным о сигнале, так что valgrind не имеет возможности что-либо делать.

...