여기서는 재부팅/다시 시작에 대해 이야기하고 있지 않습니다(다른 질문과 유사). 이 질문은 Windows가 taskkill에 대한 기존 파일 잠금을 처리하는 다양한 방식과 종료/재부팅에 응답하는 방식을 구별합니다.
만약 내가강제로 죽이기프로그램에서 잠긴 파일은 여전히 잠긴 상태로 유지됩니까, 아니면 프로세스도 종료되면 잠금이 해제됩니까?
강제 종료란 작업 관리자에서 'taskkill' 명령이나 '프로세스 트리 종료'를 사용하는 것을 의미합니다.
더 명확히 하기 위해 MS Word처럼 상주하는 제거되지 않은 보조 잠금 파일을 남겨두는 프로세스에 대해 말하는 것이 아닙니다. 나는 실제 독점 또는 공유 파일 잠금 상태에 대해 이야기하고 있습니다.
taskkill이 파일 잠금을 해제하나요? 아니면 재부팅하거나 컴퓨터 관리 콘솔 내에서 관리자 작업이 수행될 때까지 잠금이 유지됩니까?
확인할 수 있는 내용은 다음과 같습니다. 단독 잠금을 설정하는 16비트 프로세스를 종료하는 것입니다.
이는 동일한 로컬 디렉터리에 있는 파일에 배타적 잠금을 설정하는 작은 콘솔 프로그램을 사용하는 것입니다. 프로그램은 사용자가 키를 누를 때까지 계속 실행된 다음 파일의 잠금을 해제합니다. 일어나는 일은 다음과 같습니다.
명령 프롬프트에서 실행되고 작업 관리자에서 종료되면 잠금이 해제됩니다. 종료할 프로세스는 프로그램을 시작한 특정 cmd.exe입니다. 죽이면 잠금이 해제됩니다.
클릭하여 시작한 다음 창을 닫아 종료하면 잠금이 해제됩니다.
그러나 작업 관리자에서 conhost.exe를 클릭한 다음 종료하여 실행하면 잠금이 해제되지 않습니다. 이 경우에도 cmd.exe를 클릭했기 때문에 존재하지 않습니다. 따라서 이를 종료하는 유일한 방법은 실행 중인 conhost.exe 또는 ntvdm.exe를 종료하는 것입니다. 잠금은 재부팅할 때까지 그대로 유지됩니다.
작업 관리자에서 ntvdm.exe를 클릭한 다음 종료하여 실행하면 잠금이 해제됩니다.
배타적 잠금은 실제로 파일 삭제를 방지하지 않습니다. 그러나 Windows에서는 잠금이 설정된 동안 탐색기에서 파일을 복사하는 것을 허용하지 않습니다.
따라서 작업이 cmd 프롬프트를 통해 시작되는지 또는 conhost 또는 ntvdm 하위 시스템을 클릭하고 종료하여 시작되는지에 따라 두 가지 동작이 달라집니다. 물론 ntvdm.exe 하위 시스템을 종료하면 ntvdm 스레드에서 작업 중인 다른 프로세스도 종료됩니다.
답변1
예, 잠금은 유지되지만 OS에서 잠금이 언제 해제될지는 예측할 수 없습니다. 보다잠금파일()그리고잠금파일Ex():
파일의 일부가 잠겨 프로세스가 종료되거나 미해결 잠금이 있는 파일을 닫는 경우 운영 체제에 의해 잠금이 잠금 해제됩니다. 그러나 운영 체제가 이러한 잠금을 해제하는 데 걸리는 시간은 사용 가능한 시스템 리소스에 따라 다릅니다. 따라서 프로세스가 종료될 때 잠긴 모든 파일을 명시적으로 잠금 해제하는 것이 좋습니다. 그렇지 않은 경우 운영 체제가 아직 잠금을 해제하지 않은 경우 해당 파일에 대한 액세스가 거부될 수 있습니다.