What process is listening on a certain port on Solaris?

后端 未结 11 1197
情话喂你
情话喂你 2020-12-13 02:24

So I log into a Solaris box, try to start Apache, and find that there is already a process listening on port 80, and it\'s not Apache. Our boxes don\'t have lsof installed,

相关标签:
11条回答
  • 2020-12-13 03:13

    I found this script somewhere. I don't remember where, but it works for me:

    #!/bin/ksh
    
    line='---------------------------------------------'
    pids=$(/usr/bin/ps -ef | sed 1d | awk '{print $2}')
    
    if [ $# -eq 0 ]; then
       read ans?"Enter port you would like to know pid for: "
    else
       ans=$1
    fi
    
    for f in $pids
    do
       /usr/proc/bin/pfiles $f 2>/dev/null | /usr/xpg4/bin/grep -q "port: $ans"
       if [ $? -eq 0 ]; then
          echo $line
          echo "Port: $ans is being used by PID:\c"
          /usr/bin/ps -ef -o pid -o args | egrep -v "grep|pfiles" | grep $f
       fi
    done
    exit 0
    

    Edit: Here is the original source: [Solaris] Which process is bound to a given port ?

    0 讨论(0)
  • 2020-12-13 03:14

    You might not want to, but your best bet is to grab the sunfreeware CD and install lsof.

    Other than that, yes you can grovel around in /proc with a shell script.

    0 讨论(0)
  • 2020-12-13 03:14

    Most probly sun's administrative server.. It's usually bundled along with sun's directory and a few other webmin-ish stuff that is in the default installation

    0 讨论(0)
  • 2020-12-13 03:18

    From Solaris 11.2 onwards you can indeed do this with the netstat command. Have a look here. The -u switch is what you are looking for.

    If you are on a lower version of Solaris then - as others have pointed out - the Solaris way of doing this is some kind of script wrapper around pfiles command. Beware though that pfiles command halts the process for a split second in order to inspect it. For 99.9% of processes this is unimportant. Unfortunately we have a process that will give a core dump if it is hit with a pfiles command so we are a bit cautious about using the command. Your situation may be totally different if you are in the 99.9%, meaning you can safely use the pfiles command.

    0 讨论(0)
  • 2020-12-13 03:19

    netstat on Solaris will not tell you this, nor will older versions of lsof, but if you download and build/install a newer version of lsof, this can tell you that.

    $ lsof -v
    lsof version information:
        revision: 4.85
        latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
        latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
        latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
        configuration info: 64 bit kernel
        constructed: Fri Mar 7 10:32:54 GMT 2014
        constructed by and on: user@hostname
        compiler: gcc
        compiler version: 3.4.3 (csl-sol210-3_4-branch+sol_rpath)
        8<- - - - ***SNIP*** - - -
    

    With this you can use the -i option:

    $ lsof -i:22
    COMMAND   PID     USER   FD   TYPE             DEVICE   SIZE/OFF NODE NAME
    sshd      521     root    3u  IPv6 0xffffffff89c67580        0t0  TCP *:ssh (LISTEN)
    sshd     5090     root    3u  IPv6 0xffffffffa8668580   0t322598  TCP host.domain.com:ssh->21.43.65.87:52364 (ESTABLISHED)
    sshd     5091   johngh    4u  IPv6 0xffffffffa8668580   0t322598  TCP host.domain.com:ssh->21.43.65.87:52364 (ESTABLISHED)
    

    Which shows you exactly what you're asking for.

    I had a problem yesterday with a crashed Jetty (Java) process, which only left 2 files in its /proc/[PID] directory (psinfo & usage).

    pfiles failed to find the process (because the date it needed was not there)

    lsof found it for me.

    0 讨论(0)
提交回复
热议问题