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


22

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

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


이미 실행 중이면 할 수 없습니다.
Kevin

1
작업이 백그라운드에서 "사라지기 전에"입력이 필요한 경우, zenity 또는 yad와 같은 도구를 사용할 수 있습니다 (guis를 좋아하는 경우). 여전히 백그라운드에서 출력을 보내고받을 수 있습니다. 파이프와 장치를 사용하면 백그라운드에서 콘솔에 액세스 할 수 있다고 확신하지만 어떻게 해야할지 모르겠습니다.
Joe

@ 조 멋지지만, 내가 의미하는 바는 전혀 없습니다. 앱을 일시 중지하지 않고 백그라운드로 직접 앱을 보내려고합니다. 즉을 누르지 않고 ctrl+z명령을 실행합니다 bg. 앱을 백그라운드로 보내는 단일 키 스트로크 콤보가 있습니까?
trusktr

답변:


17

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

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


흥미롭게도 Bash 에서이 작업을 수행 할 수 있는지 확인하십시오. 그렇다면 해결책이 될 것입니다. zsh에 익숙하지 않습니다. 스크립트가 무엇을 설명 하는가?
trusktr

@trusktr 내 편집 내용을 참조하십시오.
Gilles 'SO- 악마 중지'

감사! zsh로 전환하려고합니다. 나는 그것에 대해 너무 좋은 것들을 듣고있다.
trusktr

15

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

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

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

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


그것은 유용하지만 내가 의미하는 것은 아닙니다. 포 그라운드에 앱이 있고 나중에 백그라운드로 보내려면 명령 줄 ctrl+z에서을 누른 다음 bg백그라운드에서 실행되는 앱 을 실행할 수 있습니다 . 그러나을 누르고 ctrl+z실행하는 사이 bg에는 앱이 완전히 일시 중지되는 기간이 있습니다. 나는 그것을 원하지 않습니다. 백그라운드로 즉시 보내려면 어떻게해야 합니까?
trusktr

Gilles와 같은 @trusktr가 말했다. 쉘과 터미널 모두에 알려야합니다. 죄송합니다, 그 방법을 모르겠습니다.
prateek61 1

질문에 대답하지 않습니다.
Luciano Andress Martini

4

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

sleep 300 &

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


ctrl + z를 누르고 bg를 실행하는 사이에는 앱이 완전히 일시 중지되는 시간이 있습니다. 따라서 즉시 백그라운드로 보낼 방법이 없습니까?
trusktr

1
아니. Giles가 말했듯이 쉘과 터미널을 모두 사용합니다. 각각에 알려야합니다.
bahamat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.