如何停掉监听 linux

在Linux系统中,监听通常指某个进程或服务在网络端口上等待连接请求的状态,常见于Web服务器(如Nginx、Apache)、数据库服务(如MySQL、Redis)或自定义应用程序,停止监听可能是出于安全加固、服务迁移、资源释放或故障排查等需求,以下是详细的方法和步骤,涵盖不同场景下的监听停止操作。

如何停掉监听 linux

查找监听信息:定位目标是前提

停止监听前,需先明确当前系统中有哪些进程或服务正在监听,以及监听的端口和协议,常用的工具有netstatss(推荐,因ssnetstat的升级版,性能更优)。

使用ss命令查看监听

ss命令可快速显示TCP、UDP等协议的 socket 统计信息,常用选项如下:

  • -t:显示TCP端口
  • -u:显示UDP端口
  • -l:仅显示监听状态的端口
  • -n:以数字形式显示地址和端口(避免域名解析延迟)
  • -p:显示使用该端口的进程ID(PID)和名称

示例:查看所有监听的TCP和UDP端口

ss -tulnp

输出示例中,Local Address:Port列显示监听地址和端口(如0.0.0:80表示监听所有IPv4地址的80端口),PID/Program name列对应进程信息(如nginx: master process)。

使用netstat命令(传统工具)

若系统未安装ss,可用netstat,选项与ss类似:

netstat -tulnp

筛选特定端口的监听

若需查看特定端口(如8080端口)的监听情况:

ss -tulnp | grep ':8080'

命令对比表格

命令 常用选项 功能描述
ss -tulnp 显示TCP/UDP监听端口,进程ID及名称
netstat -tulnp 传统工具,功能同ss,但性能略低

停止系统服务监听:适用于常规服务

大多数Linux服务(如Nginx、Apache、SSH、MySQL)通过系统服务管理器(如systemdSysV)启动,停止监听需通过服务管理命令。

如何停掉监听 linux

使用systemctl管理(主流系统)

现代Linux发行版(如Ubuntu 16+、CentOS 7+)使用systemd,操作如下:

  • 停止服务(立即终止进程,释放端口):
    systemctl stop nginx  # 以Nginx为例
  • 禁用自启动(避免服务开机自动运行,长期生效):
    systemctl disable nginx
  • 查看服务状态(确认是否已停止):
    systemctl status nginx

    若输出中显示Active: inactive (dead),则表示服务已停止。

使用service命令(传统SysVinit)

旧版系统(如CentOS 6、Ubuntu 14)或兼容模式下,可用service命令:

service nginx stop

针对特定服务的注意事项

  • Nginx/Apache:停止服务前建议检查配置文件语法(nginx -t),避免因配置错误导致后续启动失败。
  • MySQL/PostgreSQL:若数据库正在处理事务,直接停止可能导致数据损坏,建议先执行mysqladmin shutdown(MySQL)或pg_ctl stop(PostgreSQL)优雅关闭。

终止特定进程监听:适用于非服务进程

若监听来自自定义脚本、Java/Python程序等非系统服务进程,需通过进程ID(PID)终止进程。

查找目标进程PID

通过ps命令结合grep筛选进程:

ps aux | grep "python"  # 查找Python进程

注意:grep自身也会出现在结果中,可通过grep -v grep过滤:

ps aux | grep "python" | grep -v grep

终止进程

根据进程重要性选择终止方式:

如何停掉监听 linux

  • 优雅终止(推荐):发送SIGTERM信号(15),允许进程清理资源后退出:
    kill PID  # PID为上一步查到的进程ID
  • 强制终止:若进程无响应,发送SIGKILL信号(9),立即终止进程(可能导致数据丢失):
    kill -9 PID

批量终止同名进程

若多个同名进程需终止,可用pkillkillall

pkill -f "python app.py"  # 根据进程名或命令终止
killall nginx  # 终止所有名为nginx的进程

通过防火墙禁止监听:临时阻断外部访问

若需快速禁止外部访问监听端口(但不停止进程),可通过防火墙规则实现。

使用iptables(传统防火墙)

  • 添加规则(禁止TCP 80端口入站):
    iptables -A INPUT -p tcp --dport 80 -j DROP
  • 保存规则(避免重启失效):
    service iptables save  # CentOS/RHEL
    iptables-save > /etc/iptables/rules.v4  # Debian/Ubuntu

使用firewalld(CentOS 7+、RHEL 7+)

  • 添加规则(永久禁止80端口):
    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --reload  # 重新加载防火墙
  • 移除规则(若需恢复访问):
    firewall-cmd --permanent --remove-port=80/tcp
    firewall-cmd --reload

验证监听是否停止

执行停止操作后,需再次检查端口监听状态:

ss -tulnp | grep ":80"  # 检查80端口是否仍监听

若无输出,或State列不再是LISTEN,则表示监听已停止。

注意事项

  1. 权限问题:停止系统服务或终止进程需root权限(sudo),普通用户会提示“Permission denied”。
  2. 服务依赖:若服务被其他服务依赖(如PHP-FPM依赖Nginx反向代理),直接停止可能导致依赖服务异常。
  3. 配置文件修改:停止服务后,若需彻底移除监听,建议修改服务配置文件(如Nginx的nginx.conf)并注释或删除监听指令,再重启服务。
  4. 日志排查:若停止失败,可通过系统日志(journalctl -u nginx)或应用日志(如Nginx的error.log)排查原因。

相关问答FAQs

Q1:为什么用systemctl stop停止服务后,端口依然在监听?
A:可能原因包括:(1)服务未完全停止(如systemctl status仍显示active),可尝试systemctl kill强制终止;(2)存在多个服务实例(如Nginx的master进程未退出,需手动终止master PID);(3)服务使用了“端口复用”(如SO_REUSEADDR选项),需先关闭该选项再重启,建议检查进程列表(ps aux | grep 服务名),确认是否有残留进程。

Q2:如何区分监听端口是来自系统服务还是独立进程?
A:通过ss -tulnp输出中的PID/Program name列判断:若进程名为系统服务(如nginxmysqld),则属于系统服务;若为脚本名(如pythonjava)或自定义路径(如/usr/local/bin/myapp),则为独立进程,可通过systemctl status查看服务状态,或cat /proc/PID/status查看进程的启动命令和父进程信息进一步确认。

原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/35723.html

(0)
酷番叔酷番叔
上一篇 2025年10月4日 12:42
下一篇 2025年10月4日 12:58

相关推荐

  • Linux程序崩溃后,如何有效检测崩溃原因?

    Linux程序崩溃是开发过程中常见的问题,可能由内存访问越界、空指针解引用、资源耗尽、逻辑错误等多种原因引起,有效的崩溃检测能够帮助开发者快速定位问题根源,提高系统稳定性,本文将详细介绍Linux环境下检测程序崩溃的多种方法,涵盖日志分析、调试工具、内存检测、信号处理及性能监控等维度,并结合实际场景说明具体操作……

    2025年9月28日
    1400
  • rsh服务运行状态如何检查?

    在Linux系统中,rsh(Remote Shell)是一种历史悠久的远程登录协议,但由于其明文传输数据且缺乏加密机制,存在严重的安全风险(如密码嗅探、中间人攻击),现代Linux环境强烈建议关闭rsh服务,并改用更安全的SSH协议,以下是详细操作步骤:检查rsh服务状态在关闭前,确认系统是否启用了rsh相关服……

    2025年6月23日
    5500
  • Linux改root密码如何避免风险?

    当前用户拥有sudo权限(推荐)适用场景:已知普通用户密码且该用户已被加入sudo组(如Ubuntu默认配置),步骤:打开终端,执行命令: sudo passwd root输入当前用户的登录密码(验证sudo权限),输入两次新的root密码(输入时无星号提示,属正常现象),出现 passwd: password……

    2025年7月23日
    4200
  • linux中如何清除屏幕

    Linux中,可使用快捷键Ctrl + L或执行命令clear来清除屏幕

    2025年8月17日
    2900
  • Linux查看当前时间,有哪些常用命令及详细操作步骤?

    Linux作为服务器和开发环境的主流操作系统,时间的准确性和查看方式至关重要,无论是系统日志记录、定时任务执行,还是跨时区协作,都需要掌握查看和调整时间的方法,本文将详细介绍Linux中查看当前时间的多种命令及其实际应用场景,帮助用户根据不同需求选择合适的工具,date命令:最基础的时间查看工具date是Lin……

    2025年9月26日
    1800

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信