티스토리 뷰

728x90
반응형

간혹 Process를 기동하려다 보면 Binding Exception이 종종 발생하게 됩니다.

이에 오늘은 OS별 Port를 사용하고 있는 Process 찾는 방법을 알아보겠습니다.

죽이는 방법은 알아서~ kill로 죽이세요.

먼저 Windows입니다.

netstat -ano 명령어로 확인이 가능합니다.

 

해당 명령어를 아래와 같이 조합하여 사용중인 Process의 PID를 확인합니다.

 

Process ID는 4인것을 확인했고 작업 관리자 창에서 해당 Process가 무엇인지 확인해 볼까요?

 

자 해당 Process는 System Process임을 확인했습니다.

우클릭해서 죽이면 되는데.. System은 죽이면 안되겠죠?

두번째로 LINUX입니다.

LINUX는 fuser 명령어를 사용합니다.


[root@infrasvr ~]# fuser -h
Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
             [ - ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME...
       fuser -l
       fuser -V
Show which processes use the named files, sockets, or filesystems.

    -a        display unused files too
    -c        mounted FS
    -f        silently ignored (for POSIX compatibility)
    -i        ask before killing (ignored without -k)
    -k        kill processes accessing the named file
    -l        list available signal names
    -m        show all processes using the named filesystems
    -n SPACE  search in this name space (file, udp, or tcp)
    -s        silent operation
    -SIGNAL   send this signal instead of SIGKILL
    -u        display user IDs
    -v        verbose output
    -V        display version information
    -4        search IPv4 sockets only
    -6        search IPv6 sockets only
    -         reset options

  udp/tcp names: [local_port][,[rmt_host][,[rmt_port]]]

[root@infrasvr ~]# fuser -n tcp 9736
9736/tcp:            18864
[root@infrasvr ~]#


tcp name space 중 9736 port를 사용하고 있는 Process pid는 18864입니다.

이후 잘알고 있는 ps 명령어로 확인 할 수 있겠죠


[root@infrasvr ~]# ps -ef | grep 18864
narason  18864     1  0 May17 ?        00:39:45 /usr/java/jdk1.7.0_07_x64/bin/java -DadminServer -Xmx1024m -XX:MaxPermSize=128m -server -Xbootclasspath/p:/user/narason/jeus7/lib/system/extension.jar -classpath /user/narason/jeus7/lib/system/bootstrap.jar -Djava.security.policy=/user/narason/jeus7/domains/jeus_domain/config/security/policy -Djava.library.path=/user/narason/jeus7/lib/system:/user/narason/webtob/lib:/user/narason/webtob/lib -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net -Djeus.jvm.version=hotspot -Djava.util.logging.config.file=/user/narason/jeus7/bin/logging.properties -Dsun.rmi.dgc.server.gcInterval=3600000 -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djeus.home=/user/narason/jeus7 -Djava.net.preferIPv4Stack=true -Djeus.tm.checkReg=true -Djeus.bridge.log.level=FINEST -Dsun.rmi.dgc.client.gcInterval=3600000 -Djeus.tool.webadmin.locale.language=ko -Djeus.domain.name=jeus_domain -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djeus.server.protectmode=false -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=/user/narason/jeus7/logs/adminServer/jvm.log jeus.server.admin.DomainAdminServerBootstrapper -domain jeus_domain -server adminServer -u administrator
root     27468 27435  0 13:52 pts/4    00:00:00 grep 18864
[root@infrasvr ~]#


확인해 보니 narason 이라는 사용자가 adminServer라는 process를 기동하여 해당 port를 점유하고 있음을 알수 있습니다.

죽이는 방법은 알아서 잘 죽이시면 되구요

세번째로 UNIX 계열 HP-UX입니다.

사실 LINUX역시 사용할 수 있는 명령이인데요. 바로 lsof입니다. (Solaris 제외)


[nrson@hptest:/home/nrson]$ lsof | grep 9736 | grep LIST
java      28961 nrson  117u  IPv4 0xe0000001730c2040        0t0    TCP *:9736 (LISTEN)
[nrson@hptest:/home/nrson]$ ps -ef | grep 28961
   nrson 28961     1  0  May 18  ?        46:37 /opt/java_install/java7_09/opt/java7/bin/java -DadminServer -Xmx1024m -XX:MaxPermSize=128m -server -Xbootclasspath/p:/home/nrso
   nrson 13609  9292  0 14:27:59 pts/0     0:00 grep 28961
[nrson@hptest:/home/nrson]$


확인해 보니 ?? 역시 JEUS7 adminServer가 기동되어 있는 것을 확인할 수 있습니다.

그럼 역시 죽이면 되겠네요.

네번째로 UNIX 계열 Solaris입니다.


ProcessSearch.sh

#!/usr/bin/bash

port=$1
for proc in `ptree -a | grep -v ptree | awk '{print $1};'`
do
        result=`pfiles $proc 2> /dev/null| grep "port: $port"`
        if [ ! -z "$result" ]
        then
                program=`ps -fo comm -p $proc | /usr/bin/tail -1`
                ps -ef | grep  $proc | grep -v grep
        fi
done

root@suntest:/home/nrsonsh cpu.sh 9736
   nrson 10876     1   0 13:07:30 pts/21      4:32 /usr/jdk1.7.0_10/bin/java -DadminServer -Xmx1024m -XX:MaxPermSize=128m -server 
root@suntest:/home/nrson>


드디어 Solaris도 찾았습니다.

그럼 죽여야죠!

마지막 다섯번째로 UNIX 계열 AIX입니다.

aix의 경우 마찬가지로 lsof로 동일하게 찾을 수 있습니다.


[nrson@ibmtest:/home/nrson]$ lsof -i TCP:9736 | grep LIST

COMMAND      PID  USER   FD   TYPE             DEVICE  SIZE/OFF NODE NAME
java    10203200 nrson  192u  IPv4 0xf100060003b17398       0t0  TCP *:9736 (LISTEN)
[nrson@ibmtest:/home/nrson]$


간단하죠?

찾은 Process 10203200을 ps로 확인해 보면


[nrson@ibmtest:/home/nrson]$ ps -ef | grep 10203200
   nrson 10203200        1   0 15:04:50      -  9:58 /usr/java6_64//bin/java -DadminServer -Xmx1024m -XX:MaxPermSize=128m -Xbootclasspath/p:/home/nrson/jeus7/lib/system/extension.jar -classpath /home/nrson/jeus7/lib/system/bootstrap.jar -Djava.security.policy=/home/nrson/jeus7/domains/jeus_domain/config/security/policy -Djava.library.path=/home/nrson/jeus7/lib/system -Djava.endorsed.dirs=/home/nrson/jeus7/lib/endorsed -Djava.util.logging.config.file=/home/nrson/jeus7/bin/logging.properties -Djeus.dispatcher.blocking=true -Djeus.home=/home/nrson/jeus7 -Djava.util.logging.manager=jeus.util.logging.JeusLogManager -Djava.net.preferIPv4Stack=true -Djava.util.prefs.PreferencesFactory=java.util.prefs.FileSystemPreferencesFactory -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djeus.properties.replicate=jeus,sun.rmi,java.util,java.net -Djeus.tm.checkReg=true -Djeus.tool.webadmin.locale.language=ko -Djeus.jvm.version=old -Djeus.domain.name=jeus_domain -Djava.naming.factory.initial=jeus.jndi.JNSContextFactory -Djava.naming.factory.url.pkgs=jeus.jndi.jns.url -Djeus.server.protectmode=false jeus.server.admin.DomainAdminServerBootstrapper -domain jeus_domain -server adminServer -u administrator
[nrson@ibmtest:/home/nrson]$


또 이놈이네요 kill ㄱㄱ

자 오늘은 OS별 PORT로 PROCESS 찾아서 죽이는(??) 방법을 알아봤습니다.

# 댓글과 추천은 글쓴이에게 힘이됩니다.!

728x90
반응형