답변:
여기에는 두 가지 문제가 있습니다.
1) HUP에 의한 사망 및 피하기 :
쉘에서 프로그램을 시작한 다음 해당 쉘을 종료하면 모든 하위 프로세스가 종료됩니다. 여기에는 백그라운드에서 실행되는 프로그램이 포함됩니다. (이 kate &
예제에서 와 같이 명령 끝에서 &로 시작 하지만 일시 중지 한 프로세스 controlz는 bg
).
껍질을 닫으면 둘 다 죽습니다. *1
disown
백그라운드 프로그램을 사용 하여이 문제를 해결할 수 있습니다 . 그러면 계속 실행되지만 더 이상 쉘의 전경으로 되돌릴 수 없습니다.
nohup (예 :)을 사용 nohup kate &
하여 프로그램의 출력을 파일로 유지할 수 있습니다 . 그러나 쉘에 대한 완전한 재 부착도 더 이상 가능하지 않습니다.
2) 터미널 에뮬레이터.
터미널 자체를 에뮬레이트하고 특별히 빌드 된 프로그램을 시작하여 다시 연결할 수 있습니다. screen
그리고 tmux
이 두 가지 예이다.
화면 사용 예 :
screen
(화면을 시작합니다. 기본적으로 새 쉘이 시작됩니다).kate
(케이트를 시작합니다).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를 사용하면 .setopt
HUP
screen
입니다. 그런 다음 &
백그라운드 를 사용하지 않고 프로그램을 시작할 수 있습니다. control-AD를 사용하여 화면을 분리 (정렬)하면 프로그램이 계속 실행됩니다. 다음날 아침에 로그인 screen -r
하여 다시 연결 하는 데 사용할 수 있습니다. 집에서 로그인 (예 : SSH를 통해)하고 화면을 다시 연결할 수도 있습니다