터미널 창이 닫힐 때 LyX가 SIGHUP을 수신하고 종료되는 것을 방지합니다.

터미널 창이 닫힐 때 LyX가 SIGHUP을 수신하고 종료되는 것을 방지합니다.

나는 LyX 문서를 관리하기 위해 Ruby 스크립트를 작성했습니다. 스크립트는 사용자(=me)와 간단한 CLI 상호 작용을 수행한 다음 열려는 파일 이름을 결정하고 lyx셸 명령을 통해 엽니다.

이제 문제는 CLI 상호 작용을 위해 터미널이 필요하지만 터미널을 닫으면 LyX가 "SIGHUP 신호 포착! 안녕"이라는 메시지 상자를 표시한다는 것입니다. 을 클릭하면 OKLyX가 닫힙니다.

이 문제는 Ruby의 명령을 통해 쉘을 시작할 때 발생합니다 exec(Ruby 프로세스를 닫고 주어진 쉘 명령에 대해 새 프로세스를 시작합니다). 포크로 교체하려고 했을 때 LyX 창이 열리지 않았습니다. SIGHUPRuby 스크립트가 완료되고 터미널이 닫힐 때 LyX가 이를 수신한 것으로 추측했습니다. 이를 gets방지하기 위해 Ruby 스크립트 끝에 명령을 추가했을 때 이 추측을 확인했습니다. 닫히는 중 - 그러면 LyX 창이 열리는데, EnterRuby 스크립트 종료를 누르면 LyX가 이를 받고 SIGHUP닫힙니다.

이제 CLI 상호 작용을 GUI로 대체하고 터미널 창을 없애면 이 문제를 해결할 수 있을 것입니다. 그러나 유사한 작업을 수행하기 위해 GUI를 사용하는 것은 나에게는 과잉처럼 보입니다. 그렇다면 터미널을 닫을 때 LyX가 닫히지 않도록 하는 방법은 없을까요?

저는 KDE를 사용하여 OpenSUSE 12.1 64비트를 실행하고 있으며 터미널 에뮬레이터는 Konsole입니다.

답변1

한 가지 옵션은 nohup을 사용하여 실행하는 것입니다.

nohup mycoollittlescript

또 다른 방법은 tmux나 screen과 같은 터미널 에뮬레이터 내에서 실행하는 것입니다. 이러한 터미널 응용 프로그램은 터미널 에뮬레이터 자체입니다. 상위 터미널이 닫혀도 여전히 백그라운드에서 실행되며 다른 터미널 창에서 다시 연결할 수 있습니다. 이 시도:

screen -R -d NameOfMyBackgroundJob

처음에는 새 세션이 생성됩니다. 위 명령을 반복적으로 사용하면 기존 세션에 연결되고 다른 터미널 창과의 연결이 끊어집니다.

관련 정보