如何杀死一只逃跑的猫?

Jig*_*dhi 138 shell kill tcsh terminal cat

很多时候,我不小心cat在内容多达几千行的文件上运行了该命令。

我尝试catCtrl+CCtrl+终止命令Z,但两者都只cat在终端中显示的总输出后生效,所以我必须等到cat完全执行。

有没有更好的解决方案来避免等待?因为有时文件的大小高达 100MB,等待它会很烦人。

我正在使用tcsh.

pet*_*rph 78

如果有问题的文件包含大量数据,则发送信号实际上可以cat在完成之前到达。您真正观察到的是终端的有限速度 -cat将数据发送到终端,终端需要一些时间才能显示所有数据。

请记住,通常它必须以某种方式为每一行输出重新绘制整个输出窗口(即将窗口的内容向上移动一行并在底部打印下一行)。虽然有一些技术和算法可以使这比直接的方式更快,但仍然需要一些时间。

因此,如果您想尽快摆脱输出,请隐藏终端窗口,因为通常不会发生实际的重绘。在图形环境中,这可能意味着最小化窗口或切换到不同的虚拟桌面,在 Linux 虚拟控制台上只需切换到另一个 (( Ctrl+) Alt+ )。Fx

另请注意,如果您通过慢速网络链接(例如通过 GSM 连接的 SSH)运行此程序,在cat被信号杀死之前您肯定会看到更少的输出,因为终端的速度不再是瓶颈.

  • 您还可以尝试使用发送 `tty-stop-output` 的 Ctrl+S 停止输出。然后您可以发送 Ctrl+C。要恢复输出,请按 Ctrl+Q ... (11认同)
  • 如果您正在等待数据通过慢速 SSH 管道传输,您可以使用 OpenSSH 转义序列来关闭连接。在新行中,键入 `~?` 以查看可用选项(`~.` 关闭)。 (6认同)
  • @Carpetsmoker 恐怕软件流控制(即 Ctrl+S)在这种情况下(快速终端链接)不会有太大帮助 - 数据已经在终端缓冲区中并等待终端处理它。因此,Ctrl+S 将告诉应用程序停止发送*更多* 数据,但仍必须显示已发送的数据。 (4认同)