배쉬 프로세스-백그라운드에서 시작된 프로세스 재 연결 예를 들어, 나는 Kate를 다음과 같이 시작했습니다. kate

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

kate &

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



답변

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

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


답변

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


답변