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

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

프로그램이 충돌하면 Screen 세션에서 프로그램을 실행하고 있는데, 프로그램이 충돌하면 자체적으로 다시 시작되지만, 프로그램이 충돌하면 Screen 세션이 종료됩니다.

프로그램이 자동으로 다시 시작될 수 있도록 스크린 세션을 열어두기를 원합니다. 그렇게 할 수 있는 방법이 있나요?

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

하위 프로세스가 종료되면 화면이 종료됩니다. 이는 정상적인 동작이며 충돌이 아닙니다. 따라서 프로그램이 화면에서 직접 시작되어 충돌이 발생하면 화면도 종료됩니다. 프로그램을 셸에서 직접 시작한 경우 해당 셸은 프로그램이 충돌한 후 다시 프롬프트를 표시해야 합니다. 이 경우 화면 창이 닫히면 사실 뭔가 이상한 것입니다.

예를 들어 프로그램을 시작하고 다시 시작하는 방법과 같은 대략적인 내용을 아는 것이 도움이 될 것입니다.

관련 정보