コンソールでリアルタイムで多くのログファイルの出力を表示する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