스크린 세션이 종료되지만 프로세스는 계속해서 실행되고 있습니다.

스크린 세션이 종료되지만 프로세스는 계속해서 실행되고 있습니다.

이것은 내가 겪은 이상한 상황입니다. 우리는 사이트 외부(또는 내가 일하는 곳 외부)에 테스트 서버를 두고 있습니다. 서버에 액세스하려면 해당 네트워크에 VPN을 연결해야 합니다.

장기 실행 프로세스를 실행하기 위해 화면을 실행했습니다. 프로세스를 시작한 후 화면의 실행 가능성을 확인하기 위해 다음을 수행했습니다.

  1. 세션에서 분리되었습니다.
  2. PID를 확인하기 위해 screen -ls를 수행했습니다.
  3. ps -ef | 그렙 화면
  4. 화면 -r PID

이 명령을 실행하고 세션에 다시 연결/분리한 후 스크린 세션이 있는 것을 볼 수 있었습니다.

여기 이상한 부분이 있습니다. 다음날 다시 왔는데 스크린 세션이 없습니다. 확인하기 위해 위의 cmd를 실행했지만 아무것도 없습니다. 그러나 내 프로세스는 여전히 실행 중입니다. 프로세스를 실행하기 위해 nohup을 사용하지 않았지만 운이 좋게도 프로세스가 세션과 함께 종료되지 않았습니다.

무슨 일이 일어났는지 아는 사람 있나요? 스크린 세션이 손실된 이유는 무엇이며 운이 좋게도 프로세스가 계속 실행되는 이유는 무엇입니까?

깨달음을 주셔서 감사합니다. =)

답변1

SCREEN대신 화면이 실제로 실행되고 있지 않은지 확인하기 위해 grep을 사용할 수도 있습니다 .

/tmp일부 시스템에는 , /var/tmp, /var/run또는 이와 유사한 파일을 삭제하는 tmp 클리너가 있습니다 . 이로 인해 screen소켓 파일을 찾을 수 없게 될 수 있습니다. 세션의 PID를 식별할 수 있으면 해당 소켓 파일을 다시 작성하도록 kill -CHLD <PID>지시 할 수 있습니다. 그런 다음 다시 작동해야 합니다.screenscreen -r

이런 일이 발생한다면 screen소켓에 다른 디렉토리를 사용하도록 구성해야 할 것입니다.

답변2

최근에 저와 제 동료에게 이런 일이 다시 일어났고 그는 이것이 일어난 이유를 가능한 이유로 제시했습니다. 그는 회사의 연결 시간 초과로 인해 화면이 종료된다고 생각합니다.

여러 개의 스크린 세션이 실행 중이었고 각 세션에는 자체 장기 실행 작업이 있었습니다(단순화를 위해 세션 A와 B라고 부르겠습니다). 세션 A의 작업이 일찍 완료되고 해당 세션이 프롬프트로 돌아왔습니다. 비활성으로 인해 시간 초과 기간이 경과하면 세션 A에서 로그아웃됩니다. 이 문제가 발생했을 때 세션 B는 여전히 작업을 실행 중이지만 상위 프로세스(이 경우 화면)가 종료되면 모든 세션이 함께 사용된다고 생각합니다.

세션 B에서 실행 중이던 프로세스는 이제 화면의 상위 프로세스인 init 프로세스 또는 프로세스 1에 의해 상속되므로 다음날 아침 확인할 때 계속 실행됩니다.

이 가설은 실험을 통해 뒷받침되었습니다. Centos에서 실행되었습니다. 화면을 시작하고 2개의 세션을 열었습니다. 한 세션에서 주기적으로 cmd를 실행하여 활성 상태를 유지했습니다. 다른 하나는 우리가 무시했습니다. 약 10분 후 화면이 종료되고 두 세션이 모두 열렸습니다.

관련 정보