
프로그램이 충돌하면 Screen 세션에서 프로그램을 실행하고 있는데, 프로그램이 충돌하면 자체적으로 다시 시작되지만, 프로그램이 충돌하면 Screen 세션이 종료됩니다.
프로그램이 자동으로 다시 시작될 수 있도록 스크린 세션을 열어두기를 원합니다. 그렇게 할 수 있는 방법이 있나요?
Linux Debian 7 Wheezy를 실행 중입니다.
답변1
질문은 프로그램이 얼마나 이상하게 충돌하는가입니다. 내 마음에 떠오르는 처음 두 가지 :
screen
프로그램은 마지막 숨을 쉬면서 충돌/종료/생각하지 않는 것이 더 낫다고 생각할 수 있는 몇 가지 이상한 제어 시퀀스를 보냅니다 .- 프로그램은 상위 프로세스(
screen
또는 중간 프로세스) 에 신호를 보냅니다.껍데기) 그러면 종료됩니다.
내가 시도할 다음 단계는 다음과 같습니다.
- 정확히 얼마나
screen
종료되나요? 전체screen
프로세스를 종료합니까, 아니면 자체 창만 종료합니까(병렬 실행 화면 명령이 아직 살아 있는지, 화면 세션이 분리됩니까)? - 쉘에서 프로그램을 실행하면 다음을 수행할 수 있습니까?신호를 포착하다다음을 사용하여 프로그램에서 오는덫?
- 아직도 종료되나요
screen
리디렉션해도표준 출력그리고표준 오류파일에 추가합니다(더 이상 충돌이 발생하지 않으면 파일에 무엇이 포함되어 있는지 궁금합니다). 아마도tail -f
. 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)을 실행했습니다 .bash
xterm
bash
pstree | less
하위 프로세스가 종료되면 화면이 종료됩니다. 이는 정상적인 동작이며 충돌이 아닙니다. 따라서 프로그램이 화면에서 직접 시작되어 충돌이 발생하면 화면도 종료됩니다. 프로그램을 셸에서 직접 시작한 경우 해당 셸은 프로그램이 충돌한 후 다시 프롬프트를 표시해야 합니다. 이 경우 화면 창이 닫히면 사실 뭔가 이상한 것입니다.
예를 들어 프로그램을 시작하고 다시 시작하는 방법과 같은 대략적인 내용을 아는 것이 도움이 될 것입니다.