发送 Ctrl-C 到管道命令

发送 Ctrl-C 到管道命令

使用如下命令:

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 压缩每个保存文件。

来源: http://www.tcpdump.org/tcpdump_man.html

答案2

根据@Steven 的建议,完整命令如下:

tcpdump -w capture_file -z bzip2

然后关闭 tcpdump 就不会留下损坏的 zip 文件。当然,另一种方法是使用 Ctrl-Z、fg 和 bg 来完成类似的操作。

直到我看到@Steven 的建议,我才注意到 -z 选项。

相关内容