프로그램이 충돌하면 화면 세션이 종료됩니다.

프로그램이 충돌하면 화면 세션이 종료됩니다.

스크린 세션에서 프로그램을 실행 중인데 프로그램이 충돌하면 자동으로 다시 시작되지만 프로그램이 충돌하면 스크린 세션이 종료됩니다.

프로그램이 자동으로 다시 시작될 수 있도록 스크린 세션을 열어두기를 원합니다. 해결 방법이 무엇입니까?

저는 Linux Debian 7 Wheezy를 실행하고 있습니다.

답변1

문제는 프로그램 충돌이 얼마나 이상합니까? 내 마음에 가장 먼저 떠오른 두 가지 :

  • 프로그램은 마지막 순간에 몇 가지 이상한 제어 시퀀스를 던져서 screen사용자를 충돌/종료/생각하게 만들고 이를 보지 않는 것이 최선이라고 생각하게 만듭니다.
  • 프로그램은 상위 프로세스( screen또는 중간 프로세스) 에 신호를 보냅니다.껍데기) 종료합니다.

내가 시도할 다음 단계는 다음과 같습니다.

  1. 종료는 얼마나 정확합니까 screen? 전체 screen프로세스를 종료합니까, 아니면 자체 창만 종료합니까(병렬로 실행되는 화면 명령이 여전히 존재합니까, 화면 세션이 분리됩니까)?
  2. 쉘에서 프로그램을 실행하면 다음을 수행할 수 있습니다.캡처 신호사용된 프로그램에서?
  3. screen리디렉션해도 여전히 종료되나요?표준 출력그리고표준 에러파일에 추가합니다(더 이상 충돌이 발생하지 않으면 해당 파일에는 무엇이 포함되어 있는지 궁금합니다). 아마도 프로그램 실행을 계속해서 볼 수 있을 것입니다 tail -f.
  4. 좋습니다. 우회는 흥미로운 통찰력을 제공하지 않지만 tmux대체를 사용할 때도 동일한 문제가 존재합니까 screen?

편집 1(광고 1): 충돌하는 프로그램은 화면에서 직접 실행할 수 있습니다.

screen /usr/local/bin/your/crashing/program

또는 중간에 쉘 프로세스를 사용하십시오(예: 선호하는 쉘로 화면 창을 시작한 다음 프로그램을 실행하십시오.

screen
/usr/local/bin/your/crashing/program

또는 재탄생을 수행하는 쉘 스크립트가 있습니다.

bash -c 'while true ; do /usr/local/bin/your/crashing/program ; done'

pstree어떤 프로세스가 관련되었는지 출력에서 ​​알 수 있습니다.

xterm(309)---bash(311)---screen(230)---screen(231)---bash(234)-+-less(323)
                                                               `-pstree(322)

내 경우에는 (309) 창의 (311)에서 screen시작하는 하나(230 및 231) 가 있고, 다른 하나(234)가 있고 여기에서 실행하는 것(322 및 323)이 있습니다.bashxtermbashpstree | less

자식 프로세스가 종료되면 화면도 종료됩니다. 이는 정상적인 동작이며 충돌이 아닙니다. 따라서 프로그램이 화면에서 직접 시작되어 충돌이 발생하면 화면도 종료됩니다. 셸에서 프로그램을 수동으로 시작하면 프로그램이 충돌한 후 셸에서 프롬프트를 다시 표시해야 합니다. 이 경우 화면 창이 닫히면 정말 이상한 일이 벌어지고 있습니다.

프로그램을 시작하고 다시 시작하는 방법과 같은 몇 가지 사항을 알아두면 도움이 됩니다.

관련 정보