프로세스를 종료하면 해당 프로세스에서 열린 모든 파일이 닫히나요?

프로세스를 종료하면 해당 프로세스에서 열린 모든 파일이 닫히나요?

데이터베이스에 열려 있는 연결이 있는 프로세스를 종료하고 싶습니다. 프로세스를 종료하면 데이터베이스가 잠금 해제되었는지 확인할 수 있나요?

답변1

"호출 프로세스에서 열린 모든 파일 설명자, 디렉터리 스트림, 번역 설명자 및 메시지 디렉터리 설명자는 닫혀야 합니다." POSIX에서는 신호로 인해 프로세스가 종료되는 경우(즉, "종료") 발생해야 한다고 말합니다.

따라서 클라이언트(서버에 액세스하는 프로세스)는 반드시 네트워크 연결을 닫습니다. 행동섬기는 사람("데이터베이스")고객("귀하의 프로세스")는 서버의 재량(탐지 및 조치)에 따라 종료됩니다.

클라이언트 측에서는 네트워크 연결이 확실히 닫혀 있지만 이 경우 서버가 세션에서 무엇을 하는지 말하기는 어렵습니다. 테이블 또는 테이블의 행에 대한 잠금을 보유하는 경우 언제 해제해야 합니까?

MySQL에는 유휴 세션 시간 제한이 있으며 그 후에는 사라지는 클라이언트가 보유한 잠금을 해제합니다(참조:이 StackOverflow 질문). 무슨 일이 일어나고 있는지 확인하려면 사용 중인 특정 데이터베이스에 대한 설명서를 확인해야 하지만 내 생각에는 대부분의 경우 유휴 타이머가 관련될 것입니다.

답변2

네,하지만...

프로세스를 종료하면 해당 파일이 닫히지만 kill이는 소켓이나 다른 수단을 통해 연결된 프로세스의 경우 드문 일이 아닙니다.회로망연결(예: 데이터베이스와 함께 사용됨)이 즉시 성공하지 못합니다.죽이다의 과정. ps예를 들어, 종료 대기 중인 프로세스가 표시됩니다.

답변3

일반적으로 프로세스에서 열린 모든 파일을 종료합니다. 그러나 일부 파일 설명자가 어딘가에서 사용되면 확실히 닫히지 않습니다.

관련 정보