My linux has many ports opened by different java processes, most of them are hadoop services.

How can I know which process the port is opened by? I just use the shell script below.

 #!/bin/bash
port=$1
if [ -z "$port" ];then
echo "usage: $0 port" >&2
exit 1
fi
ps=$(lsof -i :"$port" |awk '/LISTEN/ {print $2}')
if [ -z "$ps" ];then
echo "no this port, or I don't have privilege to list the port" >&2
exit 1
fi
ps -efw |grep "$ps" |grep -v grep
exit 0

And the sample usage:

 $ lsport.sh 9000
xxx 1295 1 0 Mar09 ? 01:11:35 /usr/bin/java -Dproc_namenode ...