동결없이 백그라운드에서 작업 배치


9

이런 식으로 일을 시작한다고 해

foo

그런 다음 배경에 배치하고 싶습니다. 타이핑 Ctrl+ Z다음과 bg트릭 않고 동결 foo사이에 Ctrl+ Zbg. foo를 먼저 고정시키지 않고 어떻게 백그라운드에 배치 할 수 있습니까?


7
사용 사례는 무엇입니까? 프로세스가 단시간 동안 정지되는 것이 왜 문제입니까?
l0b0

답변:


4

기술적으로 foo이미 백그라운드에서 실행됩니다. 두 번째 터미널 세션을 시작할 수 있으며 foo다른 작업 을 수행 하는 동안 첫 번째 터미널 세션이 계속 실행 됩니다.

X에서 이것은 단순히 두 번째 터미널 응용 프로그램을 시작하거나 선택한 터미널 에뮬레이터에 이러한 기능이있는 경우 다른 탭을 여는 것과 관련이 있습니다.

콘솔에서 계획하지 않은 경우 다른 가상 터미널로 전환하고 다시 로그인해야합니다.

같은 터미널 멀티플렉서를 사용 screen하거나 tmux그 안에 다른 세션을 시작할 수 있습니다. 예를 들어, 화면에서 Ctrl+ A바로 뒤에 Ctrl+가 사용 C됩니다. 이들 사이를 전환하려면 Ca Cn 및 Ca Cp를 사용하여 터미널 세션간에 앞뒤로 이동하십시오.


즉, bash에서는 불가능합니다.
user877329

1
이 답변은 백그라운드 작업의 개념에 대한 오해에 기초한 것 같습니다. 터미널은 일반적으로 쉘에 의해 설정되는 "전경 프로세스 그룹"속성을 가지며,이 그룹의 프로세스는 터미널에서 읽고 SIGINT와 같은 tty 관련 신호를 수신 할 수 있습니다. 포 그라운드 프로세스 그룹에없는 터미널에서 실행중인 모든 프로세스는 백그라운드 프로세스입니다. 새 터미널을 만들 때 원래 터미널의 전경 작업은 보지 않더라도 해당 터미널의 전경 작업입니다.

@ WumpusQ.Wumbley 내 대답의 요점은 bash를 실행할 수있는 대부분의 (모두?) 시스템은 본질적으로 멀티 태스킹이라는 것입니다. 이러한 시스템에서 프로세스에 입력 초점이 있더라도 프로세스 자체 에 대해 본질적으로 "전경 적"은 없습니다 . foo 자체 (내가 야생에서 희귀 한 것과 존재하지 않는 것 사이에 특정 검사가없는 경우)는 최상위 창에서 실행 중인지 또는 출력을 표시하는 것이 있는지 상관하지 않습니다.
CVn

1
내 요점은 질문에 "background"와 "job"이라는 단어가 구체적으로 언급 될 때-POSIX 프로세스 그룹 프레임 워크에 의해 정의 된 의미를 가진 기술적 용어-Ctrl-Z와 bg의 메커니즘 프로세스 그룹에서 작동합니다. 프로세스 그룹 기능을 전혀 사용하지 않는 것이 좋습니다. 실제 배경과 일치하지 않는 방식으로 "배경"이라는 단어를 사용하면 질문에 대한 답이 맞지 않습니다. 그리고 "기술적으로 foo이미 백그라운드에서 실행 "으로 시작합니다 ... 기술적으로.

@ WumpusQ.Wumbley 어떻게 든 OP가 POSIX 표준을 읽지 않았다고 생각하지 않습니다. "음, 이것을 사용하고 싶습니다만 이미 시작 foo했으므로 지금 어떻게해야합니까?" 이 대답 (또는 다른 답변을) 느끼는 질문에 대답 유용하지 않은 경우, 나는 당신의 투표권을 행사하는 것이 좋습니다 것 뿐만 아니라 당신이 올바른 각도를 느끼는 것을에서 질문에 대답 자신의 대답을 떠나보다는 질문에 남은 답변 중 하나 에 대해 논쟁 . 예를 들어 l0b0의 답변이 더 낫다고 생각하지만 내 답변은 OP가 원하는 것을 대략적 으로 수행 할 수있는 방법을 제공합니다 .
CVn

3

&명령 뒤에 부호를 추가하면 ( foo &) 즉시 배경을 표시합니다. 그러나 표준 터미널 / 셸 구성에서는 포 그라운드에서 즉시 무언가를 배경으로 할 수 있는 방법이 없다고 생각 합니다.


3

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

빠른 연속으로 +를 두 번 누를 수 있는 zsh 구성 이 있습니다 . 첫 번째 프레스는 프로세스를 일시 중단하고 두 번째 프레스는 백그라운드에서 프로세스를 다시 시작합니다. 나는 그것을 bash로 이식하는 방법을 모른다.CtrlZ

키 입력을 주입 할 수있는 터미널 에뮬레이터에서 실행중인 경우 주입 할 수 있습니다 ^Zbg^M( ^제어 문자에 대한 표기법 사용 ). 예를 들어, X11 터미널 에뮬레이터 xdotool --window 1234 Ctrl_L+Z b g Return에서 1234는 터미널 에뮬레이터의 창 ID입니다. Screen을 사용하면 screen -S foo -p 12 -X stuff $'\032bg\r'where foo는 화면 세션의 이름이며 12창 ID입니다.


2

타이핑이 충분히 빠르지 않으면 kill -s SIGSTOP 1023 && kill -s SIGCONT 1023다른 쉘에서 실행 하여 1023을 대상 PID로 가정하십시오.

면책 조항 : Ruslan이 알고 있듯이 해당 시퀀스는 실제로 작업을 다시 시작하므로 신속하게 인식 bash하지 못합니다.


작업을 어떻게 배경에 배치합니까?
Ruslan

얼마나 빠릅니까?
user877329
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.