tcpdumpで今すぐキャプチャ内容を全部ファイルにflushしてくれ!! というとき
tcpdumpはキャプチャした内容をバッファに蓄積してバッチ的にflushするので,うっかりプロセスを即断するとキャプチャしていた内容をdrainできないことがままあります.困りますね.
Using the SIGUSR2 signal along with the -w flag will forcibly flush the packet buffer into the output file.
というわけでここに書いてあるとおり,SIGUSR2
をtcpdumpのプロセスに対して発行してあげるとその時点のバッファの内容をファイルに吐き出します (ただし -w
フラグによって出力先ファイルを指定している,すなわちファイル書き出しモードにしている必要がある).
If the -w option is specified, make the saved raw packet output ``packet-buffered''; i.e., as each packet is saved, it will be written to the output file, rather than being written only when the output buffer fills.
あるいは -U
(--packet-buffered
) フラグを -w
フラグとともに利用するというのも良いでしょう.ただ,この際はバッファをバイパスして直接ファイルに書き込むような挙動となるので,tcpdumpをdaemonとして常に動かしているような環境ではパフォーマンスの問題が発生する可能性があるので注意が必要そうです.
なお,-B
オプションを使ってバッファサイズを0にするとどうなのか……というとこれは
tcpdump: invalid packet buffer size 0
と出て動きません.なるほど〜,そりゃそうですね.