IT Data/사용설명서2014.10.20 19:34

출처 : http://snoopybox.co.kr/1623

톰캣 서비스 상태를 보니 " 중지하는 중.. " 이라며 상태가 변경되지 않는 것이다..

이 때, 비상대책은 [ bootstrap.jar ] (tomcat / bin) 파일로 정지/시작 을 해주는 것이다.

cmd창을 열고, 경로를 Tomcat/bin 으로 가져다 놓는다. 명령어는 [ java -jar bootstrap.jar stop ] 또는 stop 대신 start

그러면 중지/실행이 잘.. 된다.. 어의없지 않은가.. 서비스는 중지하는 중 이라면서 ㅡㅡ+

이 같은 현상이 발생하는 경우는 톰캣이 중지중.. 실행중.. 인 상태에서 톰캣파일들을 변경할 때 생긴다.


뭐 어쨋든 확실한 해결방법은 [서비스 강제종료] 이다.

1. PID확인 > [ cmd : tasklist ] > Tomcat6 라는 이름으로 PID까지 확인 할 수 있다.

2. TaskKill > [ cmd : taskkill /f /pid 0000] 0000대신 찾아낸 PID를 적어주면 된다.

3. 다시 서비스를 시작해보자


윈도우에서 특정 프로그램이 먹통된 경우, 일반적으로 작업 관리자를 띄워서 응용 프로그램 탭에서 작업 끝내기 버튼을 누르실 텐데, 가끔 이렇게 눌러도 먹통된 상태로 머무르는 경우가 있습니다. 물론 이럴 때 깔끔하게 재부팅 한번 해줘도 되겠지만, 명령어를 이용해서 프로세스를 종료해봅시다.

프로세스를 종료시킬 때 사용하는 명령어는 taskkill 입니다. 리눅스의 kill 명령어와 비슷하다 보시면 됩니다.

기본적으로 2가지 방식을 사용하는데

taskkill /f /im xxxx.exe
taskkill /f /pid 0000

/f 옵션은 강제로 종료하겠다는 말이고
/im 옵션은 이미지 이름을 지정하겠다는 말입니다.
/pid 옵션은 말 그대로 PID 값(숫자)을 지정하겠다는 말이구요.

이미지 이름이나 PID는 어떻게 확인할까요? 이미지 이름은 작업 관리자 프로세스 탭에 표시되지만 PID는 기본적으로 표시되지 않습니다. 하지만 표시하는 방법이 있는데...

작업 관리자 프로세스 탭에서 보기 메뉴를 누르면 열 선택이라는 항목이 나옵니다.


여기서 PID에 체크를 해주시면


아래 그림처럼 PID가 표시됩니다.


그런데 굳이 작업 관리자에서 확인하지 않더라도, 이미지 이름과 PID 값을 tasklist 명령어로 확인할 수 있습니다. 그리고 UI에서 확인할 수 없는 내용도 있기 때문에 tasklist 명령어는 익혀두시는게 좋겠습니다.


자 이제 여기서부터 막히는 부분이 생기게 됩니다. 같은 이름의 프로세스가 여러개 있는데, 어떤 녀석을 죽여야 할지 (몇번 PID를 죽여야 할지) 고민되는 경우가 있습니다. 바로 svchost.exe 에서 이런 고민을 하시게 될 것입니다. 일단 svchost.exe가 뭔지 대충 설명드리자면

svchost.exe란? 

Svchost.exe는 Windows에서 다양한 기능을 수행하는 데 사용하는 기타 개별 서비스를 호스팅하거나 포함하는 컴퓨터의 프로세스입니다. 예를 들어 Windows Defender에서는 svchost.exe 프로세스에서 호스팅하는 서비스를 사용합니다. 

인스턴스마다 서로 다른 서비스를 포함하는 여러 svchost.exe 인스턴스가 컴퓨터에서 실행 중일 수 있습니다. 한 svchost.exe 인스턴스는 프로그램의 단일 서비스를 호스팅하고 다른 인스턴스는 Windows와 관련된 여러 서비스를 호스팅할 수 있습니다. 작업 관리자를 사용하면 각각의 svchost.exe 인스턴스에서 실행 중인 서비스를 볼 수 있습니다.

출처 : http://windows.microsoft.com/ko-KR/windows-vista/What-is-svchost-exe

그러니까 한마디로 윈도우에서 서비스를 띄워주는 역할을 한다고 보시면 되는데, 많은 윈도우 서비스들이 svchost.exe 프로세스에 올라가 서비스로 동작하고 있습니다. 그런데 어떤 서비스가 어떤 PID의 svchost.exe 에 들어있는지 확인하려면 어떻게 해야 할까요?

tasklist /svc


많아서 보기 불편하시죠? 그렇다면 svchost.exe 이미지만 걸러내 볼까요?

tasklist /svc /fi "imagename eq svchost.exe"


또는 내가 찾고자 하는 서비스 이름을 알고 있다면 다른 방식으로 찾을 수도 있습니다. 예를 들어 작업 스캐줄러를 찾고 싶다면

tasklist /svc /fi "services eq schedule"


아무튼 이렇게 tasklist를 잘 활용하면 어떤 프로세스를 죽여야 하는지 쉽게 찾을 수 있습니다. 물론 윈도우 비스타 이상에서는 작업관리자에서 웬만큼 해결이 되지만, 그래도 taskkill, tasklist 명령어는 알아두시는게 좋다고 생각합니다.

Posted by AYAN vcjoo