使用如下命令:
tcpdump -w - | bzip2 -c > capture.cap.bz2
如果我按Ctrl-C来停止tcpdump
命令,最终我会得到一个损坏的 bzip2 存档(我假设是因为我已经终止了两个进程)。
我知道我可以发送 kill `pidof tcpdump`
,但我希望能够在不打开另一个 SSH 连接的情况下停止此操作。
有没有办法只向其中一个子进程发送(Ctrl在本例中)?Ctcpdump
答案1
虽然您可以bg
在同一个 ssh 连接中暂停、终止进程,但更好的解决方案可能是使用 tcpdump 的内置压缩功能。
使用内置-ztcpdump 的选项,而不是通过管道传输到 bzip。这将仅压缩(并保存)完整的部分(旋转)。
-z 后旋转命令
与-C或者-G选项,这将使 tcpdump 运行“postrotate 命令文件“其中 file 是每次旋转后关闭的保存文件。例如,指定 -z gzip或者-z bzip2将使用 gzip 或 bzip2 压缩每个保存文件。
答案2
根据@Steven 的建议,完整命令如下:
tcpdump -w capture_file -z bzip2
然后关闭 tcpdump 就不会留下损坏的 zip 文件。当然,另一种方法是使用 Ctrl-Z、fg 和 bg 来完成类似的操作。
直到我看到@Steven 的建议,我才注意到 -z 选项。