2015-01-08 3 views
1

나는 KepServerEx에 연결하는 응용 프로그램을 가지고 있습니다. KepServer를 연결할 때, KepServer는 1 개의 클라이언트가 서버에 연결되어 있다고 말합니다. 하지만 process.Kill() 메서드를 사용하여 응용 프로그램을 종료하면 KepServer는 여전히 서버에 연결된 클라이언트가 있다고 말합니다.살해 후 정리 처리

프로세스를 죽인 후에 어떻게 자원을 공개 할 수 있습니까?

편집 : 내 응용 프로그램은 처음 실행될 때 프로세스의 다른 모든 단계를 죽이려고합니다. 그래서 다른 인스턴스에서 프로세스를 죽이려고 시도합니다.

+0

처리를 종료하기 전에 연결을 종료 할 수 있습니까? –

+0

프로세스의 다른 인스턴스에서 프로세스를 죽이고 있습니다. – MOD

+0

일반적인 패턴은 잠시 동안 사용되지 않은 "연결"을 제거하는 것입니다. 이를 "시간 종료"라고합니다. 서버가 조기에 연결을 종료하는 일반적인 해결 방법은 클라이언트가 주기적으로 메시지를 보내도록하는 것입니다. 이것은 "HeartBeat"라고 불립니다 (OpenSSL HeartBeat의 거대한 버그 인 "HeartBleed"와 혼동하지 마십시오). – Aron

답변

1

Process.Kill 호출이 프로세스의 커널 객체와 직접 대화하고 종료하는 OS 호출이므로 기술적으로 불가능합니다. 메인 스레드가 아무리 낮게 (C, ASM) 이동하더라도 당신이 그것에 대해 할 수있는 것은 없습니다. 그리고 갑작스런 전원 차단이 발생하면 어떻게 될까요? 저의 요점은 클라이언트와의 연결을 관리하는 것이 서버의 의무라는 것입니다. 클라이언트는 도움을 받아야하지만 서버는 절대 맹목적으로 릴레이 할 수 없습니다.