Linux 通过os进程pid找到端口号

本文展示了如何使用netstat命令来查看Linux系统中被进程占用的端口,并以tnslsnr进程为例,详细展示了其占用的端口号及状态。
[root@localhost ~]# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name   
tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      3338/./hpiod        
tcp        0      0 0.0.0.0:736                 0.0.0.0:*                   LISTEN      3098/rpc.statd      
tcp        0      0 127.0.0.1:37094             0.0.0.0:*                   LISTEN      4418/ocssd.bin      
tcp        0      0 0.0.0.0:54955               0.0.0.0:*                   LISTEN      4919/ora_d000_orcl  
tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      3058/portmap        
tcp        0      0 0.0.0.0:1521                0.0.0.0:*                   LISTEN      4974/tnslsnr        
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      3358/sshd           
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      3369/cupsd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      3404/sendmail       
tcp        0      0 127.0.0.1:43259             0.0.0.0:*                   LISTEN      4418/ocssd.bin      
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      3343/python         
udp        0      0 127.0.0.1:33429             0.0.0.0:*                               4418/ocssd.bin      
udp        0      0 127.0.0.1:20633             0.0.0.0:*                               4921/ora_s000_orcl  
udp        0      0 0.0.0.0:21080               0.0.0.0:*                               3763/avahi-daemon   
udp        0      0 127.0.0.1:13017             0.0.0.0:*                               4891/ora_pmon_orcl  
udp        0      0 0.0.0.0:730                 0.0.0.0:*                               3098/rpc.statd      
udp        0      0 0.0.0.0:733                 0.0.0.0:*                               3098/rpc.statd      
udp        0      0 127.0.0.1:7394              0.0.0.0:*                               4418/ocssd.bin      
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               3763/avahi-daemon   
udp        0      0 127.0.0.1:63341             0.0.0.0:*                               4418/ocssd.bin      
udp        0      0 0.0.0.0:111                 0.0.0.0:*                               3058/portmap        
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               3369/cupsd          
udp        0      0 127.0.0.1:16633             0.0.0.0:*                               4919/ora_d000_orcl  
udp        0      0 127.0.0.1:61818             0.0.0.0:*                               4418/ocssd.bin      


下面根据os进程id(4974)检查使用的端口号:

[root@localhost ~]# netstat -nap | grep 4974
tcp        0      0 0.0.0.0:1521                0.0.0.0:*                   LISTEN      4974/tnslsnr        
tcp        0      0 127.0.0.1:1521              127.0.0.1:11798             ESTABLISHED 4974/tnslsnr        
unix  2      [ ACC ]     STREAM     LISTENING     15990  4974/tnslsnr        /var/tmp/.oracle/s#4974.1
unix  2      [ ACC ]     STREAM     LISTENING     15992  4974/tnslsnr        /var/tmp/.oracle/s#4974.2
unix  3      [ ]         STREAM     CONNECTED     14974  4663/gconfd-2       
[root@localhost ~]# 

 

### 解决Linux中的端口冲突问题 在Linux系统中,当多个进程尝试监听同一个TCP/UDP端口时会发生端口冲突。以下是几种常见的解决方案: #### 1. 查找并终止占用该端口的进程 可以通过`netstat`命令查找特定端口是否被占用以及对应的PID进程ID)。例如,要检查443端口的状态,可执行以下命令: ```bash $ netstat -anp | grep 443 ``` 上述命令会返回正在使用443端口的进程及其PID[^1]。 找到对应进程后,可以使用`kill`命令终止它: ```bash $ kill -9 PID ``` #### 2. 更改应用程序使用的端口号 如果无法停止已存在的进程,则可以选择修改新应用所使用的端口。例如,在Docker容器中安装MySQL遇到端口冲突时,可以在启动容器时指定其他未被占用的端口映射关系: ```bash docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 新端口号:3306 mysql ``` 这里,“新端口号”应替换为实际可用的一个高数值端口(通常大于1024),以减少与其他服务发生冲突的可能性[^2]。 #### 3. 调整SSH/SFTP等相关网络服务设置 对于像SFTP这样的服务,默认情况下可能绑定了较低编号的端口(<1024)。由于这些低编号端口受到严格限制,因此推荐切换到更高的自定义端口来规避潜在冲突风险。具体操作如下所示: 编辑SSHD配置文件 `/etc/ssh/sshd_config`, 将Port参数设成一个新的值比如50022: ```bash Port 50022 ``` 保存更改之后记得重启sshd服务生效,并确认新增加的支持此非标准端口访问权限已经加入到了本地防火墙策略当中去[^3][^4]. #### 4. 验证端口状态与清理残留资源 有时即使表面上看某个程序似乎关闭了但实际上其仍保持对该端口控制权没释放出来;此时可以用更精确方式定位真正持有者再做进一步处理。利用 `lsof` 工具可以帮助我们更加细致地分析哪些具体的socket连接还处于活动之中。 ```bash $ lsof -i :端口号 ``` 一旦确定无误就可以按照前面提到的方法结束掉不必要的实例或者调整它们的工作模式从而彻底消除干扰源[^5]。 ```python import os os.system('lsof -i :80') ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值