배쉬 프로세스-백그라운드에서 시작된 프로세스 재 연결


6

&로 터미널에서 시작된 프로세스를 특정 터미널에 다시 연결하는 방법이 있습니까? 예를 들어, 나는 Kate를 다음과 같이 시작했습니다.

kate &

이제 프로세스를 주어진 터미널에 다시 연결하고 싶습니다.

답변:


8

여기에는 두 가지 문제가 있습니다.

1) HUP에 의한 사망 및 피하기 :

쉘에서 프로그램을 시작한 다음 해당 쉘을 종료하면 모든 하위 프로세스가 종료됩니다. 여기에는 백그라운드에서 실행되는 프로그램이 포함됩니다. (이 kate &예제에서 와 같이 명령 끝에서 &로 시작 하지만 일시 중지 한 프로세스 controlzbg).

껍질을 닫으면 둘 다 죽습니다. *1

disown백그라운드 프로그램을 사용 하여이 문제를 해결할 수 있습니다 . 그러면 계속 실행되지만 더 이상 쉘의 전경으로 되돌릴 수 없습니다.

nohup (예 :)을 사용 nohup kate &하여 프로그램의 출력을 파일로 유지할 수 있습니다 . 그러나 쉘에 대한 완전한 재 부착도 더 이상 가능하지 않습니다.


2) 터미널 에뮬레이터.

터미널 자체를 에뮬레이트하고 특별히 빌드 된 프로그램을 시작하여 다시 연결할 수 있습니다. screen그리고 tmux이 두 가지 예이다.

화면 사용 예 :

  • 호스트에 로그인하거나 ssh하십시오.
  • screen (화면을 시작합니다. 기본적으로 새 쉘이 시작됩니다).
  • kate (케이트를 시작합니다).
  • ControlAD 화면을 분리하면 처음 로그인했을 때와 같은 프롬프트로 돌아갑니다.
  • logout

다른 컴퓨터로 이동하거나 몇 시간 후에 다시 방문하십시오. (또는 둘 다))-호스트에 로그인하거나 ssh하십시오. - screen -r (화면을 다시 연결하십시오. kate를 실행중인 쉘로 돌아 왔습니다.

화면에 유용한 명령 :

screen -d
스크린 프로그램 외부에서 스크린을 분리합니다. 내부 화면에서 분리
하려면 Control AD을 사용하십시오 .

screen -r 화면에 다시 연결합니다 (예 : 다른 위치에서)

screen -dr
연결된 화면이 있으면 먼저 분리하십시오. 그런 다음 로컬로 연결하십시오.
유용한 정보는 사무실에서 분리하고 집에서 로그인하는 것을 잊었습니다.)

screen -x
다른 세션을 닫지 않고 실행중인 화면에 연결합니다. 공유 디버깅, 도움말 세션 등에 유용합니다.


* 1 : 편집 : 내가 대답했을 때 모든 껍질이 항상 모든 자식에게 sigHUP을 보낼 것이라고 가정했습니다. 그러나 이것은 옵션이며 쉘에 따라 구성 할 수 있습니다. 어떤 경우에는 더 이상 기본값이 아닙니다.

예 1 : bash에서 buildin 명령 shopt 를 통해이 옵션을 구성 할 수 있습니다 . ( shopt -s huponexit).

예 2 : zsh를 사용하면 .setoptHUP


1
fg는 부모 터미널을 닫지 않은 경우에만 내 문제를 해결합니다. 그러나 부모 터미널을 닫으면 프로세스를 다시 연결할 수 없습니다. 아마도 내 질문을 잘 설명하지 못했을 수도 있습니다.
Mauren

9
그래서 처음 시작하는 이유 screen입니다. 그런 다음 &백그라운드 를 사용하지 않고 프로그램을 시작할 수 있습니다. control-AD를 사용하여 화면을 분리 (정렬)하면 프로그램이 계속 실행됩니다. 다음날 아침에 로그인 screen -r하여 다시 연결 하는 데 사용할 수 있습니다. 집에서 로그인 (예 : SSH를 통해)하고 화면을 다시 연결할 수도 있습니다
Hennes

9

fg 현재 터미널에서 배경에서 전경으로 무언가를 가져옵니다.


1
그러나 부모 터미널을 닫으면 작동하지 않습니다.
Mauren

@ Mauren, 아, 나는 당신의 질문을 이해하지 못했습니다. Hennes가 정답입니다. Tmux 사용을 살펴보십시오 .
SlightlyCuban

나는 그것을 fg할 수 있다는 것을 몰랐다 . 이것은 bg또는에 의해 간단한 백그라운드 작업으로 저에게 효과적이었습니다 prog &. 감사.
Matt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.