前几天,我tty
在单独的终端窗口中运行多个会话时遇到了问题。我正在运行一个昂贵的磁盘访问命令并正在等待它返回。与此同时,我正在tty
图形桌面环境中的一个单独窗口中的另一个会话中工作。
我无意中聚焦于运行磁盘访问命令(基本上是一个命令)的终端cp
,并在终端中输入以下内容,以为我要将其输入到我的另一个窗口中:
↑Enter
基于这个问题我知道数据现在位于STDIN
数据流缓冲区中,等待第一个命令返回后立即运行cp
。如您所知,我只是告诉命令再次运行:/。
问题
因为我有一些时间(这个命令需要 > 30 分钟才能返回),有没有办法在 bash 重新运行它正在完成的过程之前将这些字符从STDIN
缓冲区中刷新出来?tty
或者除了尝试将数据从另一个 bash 实例的文件流缓冲区中刷新之外,还有其他方法可以避免在我等待的进程完成后立即评估数据吗?
答案1
如果您的 tty 已noflsh
关闭该标志 - 您可以检查
stty -a < /dev/pts/whatever | grep -e -noflsh
从另一个 tty,但默认情况下它是关闭的 - 然后输入中断、退出或挂起字符将刷新输入队列。因此,如果您键入Ctrl-Z, then fg
,它将挂起当前正在运行的命令,刷新输入,然后恢复该命令。
答案2
也许您应该向 bash 发送 SIGSTOP 以防止它执行任何操作,并在完成任务后向 bash 发送 SIGKILL 。
请注意,SIGSTOP 会阻止 bash 等待您的任务完成,否则您将陷入僵尸状态。 SIGKILL init 后将重新调整您的任务,僵尸将消失。