'tasklist'에 해당되는 글 4

  1. 2011.06.10 실행 경로, 사용중인 포트 찾기
  2. 2010.11.05 Oracle APEX 를 실행하는 프로그램 찾기
  3. 2010.06.04 윈도우 프로세스 - 동일한 실행 파일을 사용한 서비스
  4. 2010.03.04 윈도우 프로세스 - 커맨드 프로세스 구분하기

실행 경로, 사용중인 포트 찾기

고객사에 기술지원을 하다 보면 관리가 제대로 되지 않아 WAS 를 어떻게 실행시키는지, 포트번호가 어떻게 되는지도 몰라서 난감할때가 많다.
이럴때 찾는 방법

- 포트번호를 알고 있으면 먼저 netstat 로 PID 를 확인한다.
PrcView 를 통해서 실행 경로를 찾는다.

- 콘솔로 실행시킨 경우 콘솔제목을 알면 tasklist 로 PID 를 확인한다.
(netstat 로 포트를 확인할 수 있다.)
PrcView 를 통해서 실행 경로를 찾는다.

- 서비스로 실행시킨 경우에는 서비스 속성을 통해서 확인한다.

Oracle APEX 를 실행하는 프로그램 찾기

간만에 개발서버에 접속하려는데 Oracle APEX 에 접속이 되지 않는다.
어떤 서비스를 실행시켜야 하는지 모르겠다.
포트가 8080이니깐 찾아보자.
> netstat -nao | findstr 8080
  TCP    127.0.0.1:8080         0.0.0.0:0              LISTENING       1388
(외부에서는 접속 못하게 되어 있네.)

PID가 1388인 프로세스를 찾자.
> tasklist | findstr 1388
TNSLSNR.EXE                 1388 RDP-Tcp#133             0      7,852 K

아마 오라클 서비스겠지.
>sc qc "OracleXETNSListener"
[SC] GetServiceConfig SUCCESS

SERVICE_NAME: OracleXETNSListener
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\oraclexe\app\oracle\product\10.2.0\server\BIN\tn
slsnr.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : OracleXETNSListener
        DEPENDENCIES       :
        SERVICE_START_NAME : LocalSystem


윈도우 프로세스 - 동일한 실행 파일을 사용한 서비스

개발자가 프로그램을 올리고 콘솔에서 WAS를 다시 시작시킴.
WAS가 내려가 있는 줄 알고 다시 시작했고(WAS를 내리지 않고 작업을 했음) 사이트가 제대로 돌아가는지 확인은 하지 않음.
사이트가 돌아가지 않아 서버관리자가 재부팅을 시킴.
서비스에 등록된 WAS가 동작해서 서비스함.

> netstat -nao | findstr LIST | findstr :80
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       1920
  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       1900

> tasklist | findstr httpd
httpd.exe                     1708 Console //80
httpd.exe                     1732 Console //8080

> tasklist | findstr java
java.exe                      1900 Console //8080
java.exe                      1920 Console //80

> tasklist /m | findstr httpd
httpd.exe                     1708 ntdll.dll, kernel32.dll, WS2_32.dll,
httpd.exe                     1732 ntdll.dll, kernel32.dll, WS2_32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,
                                   libhttpd.dll, USER32.dll, GDI32.dll,

테스트용으로 등록해뒀는 서비스가 8080포트로 동작하고 있었음.
사용하지 않는 서비스는 사용않함으로 둘 것.

PrcView에서 1708 httpd.exe의 커맨드라인 확인
"c:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  c:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m

서비스에 등록된 실행경로
"c:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  c:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m

1708은 80포트를 사용하는 서비스임.

테스트 WAS의 실행경로
"C:\resin-pro-3.0.25\httpd.exe" -service -java_home  C:\Java\jdk1.5.0_12 -resin_home  C:\resin-pro-3.0.25  -J-server  -Xms512m  -Xmx512m  -XX:PermSize=256m  -XX:MaxPermSize=256m  -conf  conf/test.conf  -server  test

PrcView에서 1920 java.exe의 커맨드라인
"C:\Java\jdk1.5.0_12\bin\java.exe" "-server" "-Xms512m" "-Xmx512m" "-XX:PermSize=256m" "-XX:MaxPermSize=256m" -classpath "c:\resin-pro-3.0.25\classes;c:\resin-pro-3.0.25\lib\resin.jar;C:\Java\jdk1.5.0_12\lib\tools.jar;C:\Java\jdk1.5.0_12\jre\lib\rt.jar;c:\resin-pro-3.0.25\lib\activation.jar;..." -Dresin.home="c:\resin-pro-3.0.25" -Dserver.root="c:\resin-pro-3.0.25" -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl com.caucho.server.resin.Resin -socketwait 1029

> netstat -nao | findstr 1029
  TCP    127.0.0.1:1029         0.0.0.0:0              LISTENING       1708
  TCP    127.0.0.1:1029         127.0.0.1:1036         ESTABLISHED     1708
  TCP    127.0.0.1:1036         127.0.0.1:1029         ESTABLISHED     1920

- PrcView로 프로세스 트리를 확인해 봄.


- 서비스가 아닌 구동 스크립트로 시작한 경우의 프로세스

직접 실행시킨 경우 사용자가 Administrator로 되어 있고 세션 이름이 RDP-...(원격데스크톱으로 들어갔음, 직접 들어가면 Console인가?)이다.
서비스로 구동시켰을때는 SYSTEM이고 세션 이름이 Services이다.

- ptree, tlist 등의 도구를 활용하면 비슷한 결과를 얻어낼 수 있다.

윈도우 프로세스 - 커맨드 프로세스 구분하기

커맨드 창에서 실행시킨 프로그램을 작업관리자에서 확인해보면 구분이 되지 않는다.


모두 cmd 로만 보여서 구분이 되지 않는다.
실행배치파일에 title 구문을 사용해서 구분을 하도록 하면 될거 같다.


tasklist 에서 창제목을 보여주지 않기 때문에 findstr 을 사용하지 않고 필터옵션을 사용한다.
([각주:1]필터옵션은 정확해야 하므로 tasklist -v | findstr server 명령을 사용하는 것이 편하다)
프로세스에서는 cmd 로 보이지만 응용 프로그램 탭에서는 title 로 수정한 창제목이 보인다.

- 참고
http://devotionnoath.tistory.com/496
  1. 2010-03-15 추가 [본문으로]