2011-09-06 45 views

答えて

26

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ですバースは信号を知らされずにカーネルによって殺され、バングラデントは何もする機会がありません。

+1

私は尋ねる前に 'kill -SIGTERM'を試みましたが、valgrindが(〜10分)停止するのにかなり時間がかかりましたので、うまくいかないと思っていました。ご回答有難うございます。 –

+0

実行中のプログラムが正常に終了するメモリより多くのメモリを割り当てている可能性があるため、通常の場合よりも時間がかかることがあります。 – TomH

+6

これは、OS X 10.7.5およびvalgrind-3.8.1では当てはまりません。 valgrindは喜んで殺すことを無視します。 –

関連する問題