스크린 세션에서 프로그램을 실행 중인데 프로그램이 충돌하면 자동으로 다시 시작되지만 프로그램이 충돌하면 스크린 세션이 종료됩니다.
프로그램이 자동으로 다시 시작될 수 있도록 스크린 세션을 열어두기를 원합니다. 해결 방법이 무엇입니까?
저는 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
자식 프로세스가 종료되면 화면도 종료됩니다. 이는 정상적인 동작이며 충돌이 아닙니다. 따라서 프로그램이 화면에서 직접 시작되어 충돌이 발생하면 화면도 종료됩니다. 셸에서 프로그램을 수동으로 시작하면 프로그램이 충돌한 후 셸에서 프롬프트를 다시 표시해야 합니다. 이 경우 화면 창이 닫히면 정말 이상한 일이 벌어지고 있습니다.
프로그램을 시작하고 다시 시작하는 방법과 같은 몇 가지 사항을 알아두면 도움이 됩니다.