手动按 CTRL Z

手动按 CTRL Z

假设在一个控制台上我运行了 tail -F,实时显示许多日志文件的输出。

然而,有时我也需要在那里运行命令,并简要检查它们的输出,而不会被尾部输出的爆发所淹没。

什么可能是一个巧妙的方法killall -STOP tail(或者以其他方式暂时地暂停自动地)在与控制台进行一些交互时(或至少按 ENTER 键,这会调用 PROMPT 命令等),并延迟killall -CONT tail90 秒最新的 shell 交互?

以前,我一直手动执行:

fg  # to tail process

手动按 CTRL Z

run my command,see output

bg  # to tail process

答案1

在许多类 Unix 系统(包括 Linux)上,Control+z是挂起进程的键序列 (SIGTSTP) 最常见的默认键盘映射。

fg将在前台恢复该进程。


编辑

使用blankerprgscreen 中的指令,您可以为您的终端定义一个“屏幕保护程序”程序。您可以使用以下命令从屏幕内以交互方式定义它:

Control+a : blankerprg tail -f /path/to/log

Control+a : idle 10 blanker

闲置 10 秒后,您定义的屏幕保护程序将启动,按任意按键将禁用它。

当然也可以添加这些设置~/.screenrc

答案2

您可以停止当前作业(上次停止或恢复的作业):

kill -STOP %%

我认为 bash 不可能在几秒钟不活动后做出反应。在 zsh 中,您可以将该TMOUT参数设置为一个数字,这会导致 shell在不活动的ALRM$TMOUT几秒后执行陷阱。 (Bash 有一个TMOUT活动,但它导致 shell 退出。)

以下 zsh 代码片段定义了一个函数,该函数暂停当前后台作业,直到出现 90 秒不活动状态,并将该函数绑定到Ctrl+ X Ctrl+ Z

suspend_background_job_during_activity () {
  job=${1-%%}
  kill -STOP $job
  TMOUT=90
  trap "fg $job; unset TMOUT; trap - ALRM" ALRM
}
zle -N suspend_background_job_during_activity
bindkey '^X^Z' suspend_background_job_during_activity

相关内容