나는 LyX 문서를 관리하기 위해 Ruby 스크립트를 작성했습니다. 스크립트는 사용자(=me)와 간단한 CLI 상호 작용을 수행한 다음 열려는 파일 이름을 결정하고 lyx
셸 명령을 통해 엽니다.
이제 문제는 CLI 상호 작용을 위해 터미널이 필요하지만 터미널을 닫으면 LyX가 "SIGHUP 신호 포착! 안녕"이라는 메시지 상자를 표시한다는 것입니다. 을 클릭하면 OK
LyX가 닫힙니다.
이 문제는 Ruby의 명령을 통해 쉘을 시작할 때 발생합니다 exec
(Ruby 프로세스를 닫고 주어진 쉘 명령에 대해 새 프로세스를 시작합니다). 포크로 교체하려고 했을 때 LyX 창이 열리지 않았습니다. SIGHUP
Ruby 스크립트가 완료되고 터미널이 닫힐 때 LyX가 이를 수신한 것으로 추측했습니다. 이를 gets
방지하기 위해 Ruby 스크립트 끝에 명령을 추가했을 때 이 추측을 확인했습니다. 닫히는 중 - 그러면 LyX 창이 열리는데, Enter
Ruby 스크립트 종료를 누르면 LyX가 이를 받고 SIGHUP
닫힙니다.
이제 CLI 상호 작용을 GUI로 대체하고 터미널 창을 없애면 이 문제를 해결할 수 있을 것입니다. 그러나 유사한 작업을 수행하기 위해 GUI를 사용하는 것은 나에게는 과잉처럼 보입니다. 그렇다면 터미널을 닫을 때 LyX가 닫히지 않도록 하는 방법은 없을까요?
저는 KDE를 사용하여 OpenSUSE 12.1 64비트를 실행하고 있으며 터미널 에뮬레이터는 Konsole입니다.
답변1
한 가지 옵션은 nohup을 사용하여 실행하는 것입니다.
nohup mycoollittlescript
또 다른 방법은 tmux나 screen과 같은 터미널 에뮬레이터 내에서 실행하는 것입니다. 이러한 터미널 응용 프로그램은 터미널 에뮬레이터 자체입니다. 상위 터미널이 닫혀도 여전히 백그라운드에서 실행되며 다른 터미널 창에서 다시 연결할 수 있습니다. 이 시도:
screen -R -d NameOfMyBackgroundJob
처음에는 새 세션이 생성됩니다. 위 명령을 반복적으로 사용하면 기존 세션에 연결되고 다른 터미널 창과의 연결이 끊어집니다.