일시 중단하지 않고 전경 프로세스를 백그라운드에 넣을 수 있습니까 (control + z)?


11

TCP 및 UDP 패킷을 수신하는 응용 프로그램을 실행 중이므로 일시 중지 할 수 없습니다. 나는을 사용하여 백그라운드 모드에서 다른 인수로 동일한 응용 프로그램의 3 개의 프로세스를 초기에 실행했습니다 &. 내가했을 때 $fg세 가지 프로세스가 모두 포 그라운드로 들어갔다. 이제 다시 일시 중단하지 않고 백그라운드로 보내려고합니다. 어떻게해야합니까?


다음은 실행중인 프로세스를 새 화면 인스턴스로 이동하는 방법에 대한 ServerFault 항목입니다.-> serverfault.com/questions/55880/…
Alan Barber

답변:


10

가장 먼저해야 할 일 : 포 그라운드에는 하나의 프로세스 만있을 수 있으며 , 세 가지 모두가 아닙니다. fg최신 프로세스를 포 그라운드로 가져옵니다. Ctrl+ 프로세스를 수행 z한 다음 bg해당 애플리케이션을 "방해"하지 않기 위해 더 빠르게 입력 하려면 (프로세스 스케줄러가 초당 여러 번이 작업을 수행함) 포 그라운드에서 프로세스의 PID를 찾은 다음 두 번째 터미널에서 / SSH 세션, 사용

kill -SIGSTOP »pid« ; kill -SIGCONT »pid«

원래 터미널은이라고 말하지만 바로 stopped전송 한 이후 SIGCONT프로세스는 백그라운드에서 계속 실행됩니다.


1
@ stefen : 솔루션이 설득력이 있습니다. 프로세스를 일시 중단하면 설정된 소켓 연결이 끊어지지 않는다고 가정하면 어떤 식 으로든 프로세스를 손상시키지 않습니다 (스케줄러 전환이 소켓 연결을 끊지 않는 것이 확실합니다). 이것을 디버깅하고 업데이트합니다. 고마워 만약
rahul.deshmukhpatil

2

포 그라운드 작업이 실제로 있다면 bash는 완료되기를 기다리고 있습니다. 포 그라운드 작업정의입니다 . bash가 여전히 터미널을 제어 할 수 있다면 다음과 jobs -l같은 상황을 확인하십시오 .

$ ncat -kl -p 10111 &
[1] 13404
$ ncat -kl -p 10222 &
[2] 13405
$ ncat -kl -p 10333 &
[3] 13406
$ jobs -l
[1]  13404 Running                 ncat -kl -p 10111 &
[2]- 13405 Running                 ncat -kl -p 10222 &
[3]+ 13406 Running                 ncat -kl -p 10333 &

ncat이를 위해 세 가지 백그라운드 청취 프로세스를 시작했습니다 . 작업 상태에 대해 "완료"또는 "중지됨"이 나타날 수도 있습니다.

당신은 효과적으로 배경 사용하여 다른 쉘에서 전경 작업 할 수 있습니다 스테판 델 의 SIGSTOP / SIGCONT 방법합니다 (비록 전송 실제 신호 와 쉘이 Ctrl- ZSIGTSTP이다, 중 신호가 작동합니다).

포 그라운드 및 배경이라는 용어가 사용될 때 프로세스작업 간에는 미묘한 차이가 있습니다 . 하나의 쉘 포 그라운드 작업 만 있고 여러 포 그라운드 프로세스 가있을 수 있습니다 (이는 터미널 프로세스 그룹 ID 와 관련이 있으며 파이프 라인에서 둘 이상의 프로세스를 시작할 때 관찰 할 수 있음).

쉘 제어 하에서 실행중인 프로세스 또는 파이프 라인을 "작업"이라고합니다. bg또는 fg명령을 사용할 때 가장 최근의 작업 (내 경우에는 위의 작업)을 암시 적으로 참조하는 것입니다 +. 이러한 작업은 (다른 것들 중에서도) % 1 % 2 또는 % 3 (의 숫자 ) 으로 명시 적 으로 참조 될 수 있습니다 [].

규정되지 않은 fg명령은 가장 최근의 한 작업에만 영향을 미치므로 현재 상황을 이해하는 데 착각 할 수 있습니다. 백그라운드 작업 여전히 터미널에 쓸 있습니다.

  echo foo > /dev/tcp/127.0.0.1/10111

프로그램이 터미널을 처리하는 방법에 따라 달라질 수 있습니다 ncat. 읽기를 위해 프로그램 실행이 중지되고 "중지됨"메시지가 표시됩니다. 프로세스를 시작하고 종료에 대기 또는 SIGTTIN 신호를 수신 할 쉘은 ( nohup같은이 주위에 방법입니다 disown).

당신은 특정 중지 작업을 배경으로 할 수 있습니다

$ bg %3

(내 경우에는 오류가 발생합니다 bash: bg: job 3 already in background)

프로그램이 SIGTSTP를 잡아 뭔가 특별한 작업을 수행하지 않는 프로세스가 전경에 그렇지 않은 경우, 그것은 빠른에 문제가있는 것 같지입니다 Ctrl- Zbg. 이와 관련하여 네트워크 프로그램에는 특별한 것이 없습니다. 들어오는 연결 / 데이터는 커널에 의해 버퍼링됩니다 (최대 1 포인트). 스트리밍 연결은 관찰 가능한 일시 중지를 가질 수 있습니다.

자세한 내용은 bash 매뉴얼 페이지 의 " 작업 제어 "섹션을 참조하십시오.


1

가장 쉬운 방법은 스크린 프로그램 을 사용하는 것 입니다. 가상 터미널 내에서 응용 프로그램을 시작한 다음 Ctrl + A, D를 사용하여 화면을 종료 할 수 있습니다. 세션을 재개하려면 유형을 입력하십시오 screen -x. 여러 프로세스가있는 경우 다시 연결할 화면 목록이 표시됩니다. 자세한 내용은 화면 맨 페이지를 참조하십시오 .


5
그는 "사실 후", 즉 프로세스가 현재 실행되고있는 솔루션을 찾고 있다고 생각합니다.
Stefan Seidel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.