윈도우 서비스 강제 종료 시 주의사항
윈도우용 서버 프로그램을 서비스 모드로 운영할 때 서비스를 중지해야 하는 상황은 매우 빈번하다.
패치 배포나 서버 작업을 하려면 반드시 서비스를 먼저 중지해야 한다.
서비스 중지 명령은 기본적으로 sc stop 명령어가 있다. 그런데 이 명령으로 중지시켜도 서비스가 제대로 종료되지 않는 경우가 있었다. Windows의 ‘서비스’ 창에서는 중지된 것처럼 보이지만 실제 프로세스는 살아 있는 상태였다.
Jenkins에서 배치 파일로 빌드 및 패치를 자동화했는데, 이렇게 종료되지 않은 서비스 때문에 Sharing violation 에러가 발생하며 패치가 실패했다.
이런 경우 taskkill 명령어를 사용하면 된다. taskkill /f /im xxxx.exe 형태로 프로세스를 강제 종료할 수 있다.
다만 몇 가지 주의사항이 있다.
- 강제 종료이므로 서버 종료 처리 로직이 정상적으로 실행되지 않을 수 있다.
- 이 명령은 실행 파일명을 기준으로 프로세스를 종료한다. 경로는 달라도 파일명이 같다면 해당 이름의 모든 프로세스가 한꺼번에 종료된다. 베타 서버, 개발 서버 등이 같은 실행 파일명을 공유하고 있다면 전부 죽어버리므로 주의해야 한다.
댓글 남기기