수동으로 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

관련 정보