화면은 메인 터미널에 작업이 완료되고 닫혔다는 신호를 보냅니다.

화면은 메인 터미널에 작업이 완료되고 닫혔다는 신호를 보냅니다.

인용하다여기배경 화면 세션에서 스크립트를 실행하고 자체적으로 닫는 것과 관련됩니다.

screen -dmS myscreen bash -c 'command1; command2;'

사용자에게 알릴 수 있도록 screen myscreen의 실행이 완료되었음을 기본 터미널에 어떻게 알리나요? 그렇지 않으면 자동으로 완료되고 닫힙니다.

답변1

을 호출하면 screen -dm현재 셸과 관계없이 별도의 세션이 시작됩니다. 새 세션은 현재 셸의 하위 세션이 아니기 때문에 일종의 사용 확인 루프를 사용하여 직접 상태를 조사해야 합니다.

한 가지 옵션은 출력을 조사하여 screen -ls myscreen"...에서 소켓을 찾을 수 없음"과 비교하는 것입니다(현재 실행 "...에 화면이 있습니다...(분리됨)...에 1개의 소켓이 있습니다..."의 출력으로 구성됨). " 대비...") 이는 단일 "myscreen" 세션만 실행한다고 가정합니다.

while ! screen -ls myscreen | grep -q 'No Sockets found in'; do sleep 1; done

screen -ls명령은 단순히 소켓 디렉토리의 내용을 분석하여 직접 확인할 수 있습니다. 소켓 파일은 일반적으로 $SCREENDIR테스트한 시스템의 ; 에 배치됩니다 SCREENDIR=/var/run/screen. 다음 루프는 하나 이상의 파일이 와일드카드와 일치하는 한 성공하고 해당 파일이 더 이상 존재하지 않으면 종료됩니다.

while ls /var/run/screen/S-"$LOGNAME"/*.myscreen > /dev/null 2>&1; do sleep 1; done

이는 여전히 "myscreen"이라는 화면 세션만 시작했다는 가정에 의존합니다.

동일한 이름으로 여러 세션을 시작할 수 있는 경우 각 세션에 해당하는 PID를 선택할 때 더욱 주의해야 합니다.

관련 정보