web-dev-qa-db-ja.com

valgrind内で実行されているプロセスを終了する

Valgrindプロセス自体を強制終了しても、内部プロセスの実行に関するレポートは残りません。

Valgrind内で実行されているプロセスに終了信号を送信することは可能ですか?

31
Antonio Pérez

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は何もする機会がありません。

29
TomH