콘솔에서 실시간으로 많은 로그 파일의 출력을 표시하는 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