什么进程正在侦听Solaris上的某个端口?

28 unix solaris

所以我登录到Solaris框,尝试启动Apache,并发现已经有一个进程正在侦听端口80,而且它不是Apache.我们的盒子没有安装lsof,所以我不能用它来查询.我想我能做到:

pfiles `ls /proc` | less
Run Code Online (Sandbox Code Playgroud)

并寻找"端口:80",但如果有人有更好的解决方案,我全都耳朵!如果我可以在没有root的情况下寻找听力过程,那就更好了.我对shell和C解决方案都持开放态度; 我不介意有一个小的自定义可执行文件随身携带,以便下次出现.

更新:我说的是solaris的通用安装我不是管理员(虽然我有超级用户访问权限),所以从免费软件磁盘安装东西不是一个选项.显然,两者都没有使用针对fuser,netstat或其他工具的特定于Linux的扩展.到目前为止,在所有进程上运行pfiles 似乎是最好的解决方案,不幸的是.如果仍然如此,我可能会发布一个答案,其中包含一些稍微更高效的代码.

mav*_*ato 28

我在某个地方找到了这个脚本.我不记得在哪里,但它对我有用:

#!/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
Run Code Online (Sandbox Code Playgroud)

编辑:这是原始来源: [Solaris]哪个进程绑定到给定端口?

  • 主要CAVEAT在这里!从pfiles手册页:<br>警告</ br>以下proc工具在检查它们并报告结果时停止其目标进程:<b> pfiles </ b>,pldd和pstack.进程在停止时无效.在生产环境中停止频繁使用的进程...可能会导致严重的瓶颈甚至挂起这些进程,从而导致用户无法使用这些进程.<b>某些数据库也可能异常终止.</ b>因此,应避免在生产环境中停止UNIX进程. (7认同)

Mau*_*les 8

这是一个单行:

ps -ef| awk '{print $2}'| xargs -I '{}' sh -c 'echo examining process {}; pfiles {}| grep 80'
Run Code Online (Sandbox Code Playgroud)

'echo examine process PID'将在每次搜索之前打印,因此一旦你看到输出引用端口80,你就会知道哪个进程持有句柄.

或者使用:

ps -ef| grep $USER|awk '{print $2}'| xargs -I '{}' sh -c 'echo examining process {}; pfiles {}| grep 80'
Run Code Online (Sandbox Code Playgroud)

因为'pfiles'可能不喜欢你试图访问其他用户的进程,除非你当然是root.


Chr*_*fer -3

如果您有权访问netstat,那就可以做到这一点。

  • 不幸的是它不会在Solaris上。您可以使用它来显示所有打开的套接字及其状态,但不显示哪个进程打开了它们。 (10认同)