[unix] 명령 줄 앱을 백그라운드로 직접 보내는 방법은 무엇입니까?

누르면 ctrl+z앱이 중지되고 bg명령 을 사용하여 앱을 백그라운드로 보낼 수 있지만 앱이 중지되는 시간이 짧다는 것을 이미 알고 있습니다 .

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



답변

응용 프로그램을 포 그라운드에서 백그라운드로 보내려면 터미널과 셸의 협력이 필요합니다. 쉘은 포 그라운드 프로세스 그룹을 설정해야하기 때문에 터미널은 혼자서 할 수 없습니다. 터미널은 키 누름을 처리해야하기 때문에 쉘은 단독으로 수행 할 수 없습니다 (쉘은 포 그라운드에 없으므로 키 누름을 수신 할 수 없음).

가까운 근사치는 응용 프로그램을 백그라운드로 정말 빠르게 보내는 것입니다. 결국 응용 프로그램은 다른 사람과 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 stop 문자를 그대로두고 Ctrl+ Z를 입력으로 얻지 않는다는 점을 제외 하고는 만큼 쉬워야 합니다.


답변

&이후에 작업을 추가하여 백그라운드 작업을 수행 할 수 있습니다 .

예를 들어 tail -f /var/log/messages &작업을 즉시 수행합니다.

항상 그렇듯이 jobs명령으로 어떤 작업을 백그라운드로했는지 확인할 수 있습니다 .

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


답변

명령의 백그라운드는 명령에 앰퍼샌드를 추가하여 수행됩니다.

sleep 300 &

이미 실행중인 유일한 옵션은 중지하고 배경을 지정하는 것입니다.


답변