Убивание самого процесса valgrind не оставляет отчета о выполнении внутреннего процесса.
Можно ли отправить сигнал завершения в процесс, выполняющийся внутри valgrind?
Ответ 1
Нет внутреннего процесса, так как сам valgrind и клиентская программа выполняются в одном процессе.
Сигналы, отправленные на этот процесс, будут доставлены в клиентскую программу как обычно. Если сигнал заставляет процесс терринировать, тогда будут выполняться нормальные обработчики выходных данных valgrind и (например) сообщать о любых утечках.
Итак, например, если мы начнем valgrind в команде 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==
затем уничтожьте эту команду:
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 не имеет возможности что-либо сделать.