📌  相关文章
📜  bash 使用端口查找进程 (1)

📅  最后修改于: 2023-12-03 15:13:37.256000             🧑  作者: Mango

Bash 使用端口查找进程

在开发一个应用程序时,我们可能会遇到某个端口被占用的情况,这时候我们需要查找当前占用该端口的进程,找到进程后,根据不同的情况,我们可能需要杀死该进程或者修改应用程序的端口。

bash脚本可以帮助我们快速定位端口对应的进程,下面是一个简单的实现方式。

使用lsof命令查找进程

lsof命令是一条非常有用的系统命令,它可以列出当前系统中所有打开的文件和进程信息。我们可以通过该命令来查找当前占用特定端口的进程。

示例代码:
#!/bin/bash

if [ $# -ne 1 ];then
    echo "Usage: $0 <port>"
    exit 1
fi

port=$1

# 查找端口占用的进程
pid=$(lsof -t -i:$port)

if [ -z $pid ]; then
    echo "Port $port is not in use"
else
    echo "Port $port is used by process $pid"
fi
程序说明:
  • 判断输入参数数量是否正确,如果不正确则退出程序。
  • 获取输入的端口号。
  • 使用lsof命令查找占用该端口的进程的pid。
  • 判断pid是否为空,如果为空则输出该端口未被占用,反之则输出占用该端口的进程。
使用netstat命令查找进程

netstat命令也可以用来查找当前占用特定端口的进程信息。

示例代码:
#!/bin/bash

if [ $# -ne 1 ];then
    echo "Usage: $0 <port>"
    exit 1
fi

port=$1

# 查找端口占用的进程
pid=$(netstat -nlp | grep :$port | awk '{print $7}' | awk -F"/" '{ print $1 }')

if [ -z $pid ]; then
    echo "Port $port is not in use"
else
    echo "Port $port is used by process $pid"
fi
程序说明:
  • 判断输入参数数量是否正确,如果不正确则退出程序。
  • 获取输入的端口号。
  • 使用netstat命令列出所有网络连接,过滤出特定端口占用的行,并提取对应的pid。
  • 判断pid是否为空,如果为空则输出该端口未被占用,反之则输出占用该端口的进程。
总结

以上两种方法都可以用来查找当前占用特定端口的进程信息,使用时可根据个人习惯和实际情况选择。当然,还有其他一些工具和方法也可以实现相同的功能,例如:fuser命令、ss命令等等。