명령줄 애플리케이션을 백그라운드로 직접 보내려면 어떻게 해야 합니까?

명령줄 애플리케이션을 백그라운드로 직접 보내려면 어떻게 해야 합니까?

ctrl+z누르면 앱이 중지된다는 것을 이미 알고 있으며 해당 bg명령을 사용하여 앱을 백그라운드로 보낼 수 있지만 이는 앱이 잠시 동안 중지된다는 의미입니다.

앱을 중지하지 않고 백그라운드로 직접 이동하려면 어떻게 해야 합니까?

답변1

포그라운드에서 백그라운드로 애플리케이션을 보내려면 터미널과 셸의 협력이 필요합니다. 터미널은 쉘이 포그라운드 프로세스 그룹을 설정해야 하기 때문에 단독으로 수행할 수 없습니다. 터미널이 키 누르기를 처리해야 하기 때문에 쉘은 이 작업을 단독으로 수행할 수 없습니다(쉘은 포그라운드에 있지 않으므로 키 누르기를 수신할 수 없습니다).

가장 가까운 방법 중 하나는 앱을 백그라운드로 빠르게 보내는 것입니다. 결국 애플리케이션은 다른 애플리케이션과 CPU 시간을 공유하므로 몇 백분의 1초의 일시 중지는 중요하지 않습니다. (라이브 애플리케이션에서 작동하므로 백그라운드에서 시작했는지 확인하십시오.) Ctrl+ 쉘 바인딩을 사용하여 Z마지막 포그라운드 작업을 백그라운드로 보냅니다. 이렇게 하면 Ctrl+를 누르면 일시 중지 시간을 최소화하면서 Z Ctrl작업 Z을 백그라운드로 보냅니다.

여기 내 zsh 바인딩이 있습니다.명령줄이 비어 있지 않을 때 "배경" 반입력 명령.

fancy-ctrl-z () {
  emulate -LR zsh
  if [[ $#BUFFER -eq 0 ]]; then
    bg
    zle redisplay
  else
    zle push-input
  fi
}
zle -N fancy-ctrl-z
bindkey '^Z'          fancy-ctrl-z

청중 중 zsh가 아닌 사용자의 경우 영어로:

  • 다음을 수행하는 셸 함수를 정의합니다.

    • 길이가입력 버퍼0이면 현재일하다(마지막 작업이 일시 중지되거나 시작된 경우)배경, 그리고다시 표시힌트.
    • 그렇지 않으면,입력 버퍼에 푸시스택에 추가하고 새 프롬프트를 표시합니다. 사용자가 명령을 입력하거나 Ctrl+를 사용하여 명령을 취소하면 C추가 편집을 위해 푸시된 버퍼를 다시 가져옵니다.
  • 이 함수를 Ctrl+ 에 바인딩합니다 Z.

명령줄이 비어 있는지 여부에 관계없이 배경 동작만 원하는 경우:

function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_

Bash에서도 같은 일을 할 수 있는지 모르겠습니다. bind -x '"\C-z": bg'bash가 tty 중지 문자를 제자리에 유지하므로 Ctrl+를 입력으로 사용하지 않는 것처럼 간단해야 합니다 Z.

답변2

&작업 뒤에 작업을 추가하여 백그라운드에 작업을 넣을 수 있습니다.

예를 들어 tail -f /var/log/messages &작업은 즉시 백그라운드에 배치됩니다.

언제나 그렇듯이 이 명령을 사용하면 백그라운드에서 수행되는 작업을 볼 수 있습니다 jobs.

물론 이는 아직 명령을 실행하지 않았다고 가정합니다.

답변3

명령의 백그라운드 처리는 명령 끝에 & 기호를 추가하여 수행됩니다.

sleep 300 &

이미 실행 중인 경우 유일한 옵션은 중지하고 백그라운드에 두는 것입니다.

관련 정보