手動でCTRL Zを押す

手動でCTRL Zを押す

コンソールでリアルタイムで多くのログファイルの出力を表示するtail -Fを実行しているとします。

しかし、時にはそこからコマンドを実行し、テール出力に圧倒されずに出力を簡単にチェックする必要があります。

killall -STOP tailきちんとした方法(または他の方法)とは何ですか?一時的に停止する自動的にkillall -CONT tail)90秒の遅延でコンソールと対話している間(または少なくともPROMPTコマンドを呼び出すENTERキーを押すなど)後ろに最新のシェル相互作用?

以前は手動で行いました。

fg  # to tail process

手動でCTRL Zを押す

run my command,see output

bg  # to tail process

答え1

多くのUnixシリーズシステム(Linuxを含む)では、Control+はzプロセスを一時停止するキーシーケンス(SIGTSTP)の最も一般的なデフォルトキーマップです。

fgプロセスはフォアグラウンドで再開されます。


編集する

画面のディレクティブを使用して、blankerprg端末用の「スクリーンセーバー」プログラムを定義できます。次のコマンドを使用して、画面内で対話的に定義できます。

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

Control+a : idle 10 blanker

10秒間アクティビティがないと、定義したスクリーンセーバーが起動し、任意のキーを押すと無効になります。

もちろん、これらの設定を追加することもできます~/.screenrc

答え2

現在のジョブ(中止または再開された最後のジョブ)を停止できます。

kill -STOP %%

数秒間活動がなければ、bashが反応することは不可能だと思います。 zshでは、このパラメータを数値に設定できます。これにより、数秒間TMOUTアクティビティがALRMないと、シェルはトラップを実行します$TMOUT。 (BashにはTMOUTアクティビティがありますが、これはシェルを終了します。)

次の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

関連情報