linux下怎么根据端口号杀死进程?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux下怎么根据端口号杀死进程?相关的知识,希望对你有一定的参考价值。

端口号如下:

1. 查找占用的程序。

端口号:netstat -apn | grep 4040

最后一项显示的是pid和对应的名称。

2. 杀掉对应的进程,彻底杀死进程。

端口号:kill -9 26105

对计算机软件的维护主要有以下几点:

(1)对所有的系统软件要做备份。当遇到异常情况或某种偶然原因,可能会破坏系统软件,此时就需要重新安装软件系统,如果没有备份的系统软件,将使计算机难以恢复工作。

(2)对重要的应用程序和数据也应该做备份。

(3)经常注意清理磁盘上无用的文件,以有效地利用磁盘空间。

(4)避免进行非法的软件复制。

(5)经常检测,防止计算机传染上病毒。

(6)为保证计算机正常工作,在必要时利用软件工具对系统区进行保护。

总之,计算机的使用是与维护分不开的,既要注意硬件的维护,又要注意软件的维护。

参考技术A 1 netstat -nlp 查看占用端口号的服务
2 找到该端口号的进程
3 找到该进程id
4 kill它

程序可以一点一点来:

1 查看占用端口号的服务

[root@aslibra root]# netstat -nlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 12711/
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3936/httpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 3910/
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3753/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 3786/
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 2 [ ACC ] STREAM LISTENING 827412 23946/ /tmp/mysql.sock
unix 2 [ ACC ] STREAM LISTENING 733272 12711/ ./mysql.sock

(省掉了一些内容)

2 可以用grep筛选一下,看看规律,找到有 :3306 的一行就好
用管道符给grep处理:

[root@aslibra root]# netstat -nlp | grep :3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 23946/

既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个

3 读取出端口号

[root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7'
23946/

意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字

4 取/前面的数字就可以了,这里还是可以用awk处理

[root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print $1 '
23946

意思是用/符号分割,取第一部分

5 然后把这个数字传给kill就可以

kill命令不能跟在管道符后面继续处理了,会出错的

[root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print $1 ' | kill
kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]

需要用到"[']"操作符,它可以执行一个语句,这个可以如此执行:

kill [']netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print $1 '[']
参考技术B

    netstat -nlp 查看占用端口号的服务;

    找到该端口号的进程;

    找到该进程id;

    kill它。

程序可以一点一点来:

查看占用端口号的服务

    [root@aslibra root]# netstat -nlp

    Active Internet connections (only servers)

    Proto Recv-Q Send-Q Local Address           Foreign Address         State      

    PID/Program name  

    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23946/              

    tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      12711/              

    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3936/httpd          

    tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      3910/              

    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3753/sshd          

    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      3786/              

    Active UNIX domain sockets (only servers)

    Proto RefCnt Flags       Type       State         I-Node PID/Program name    Path

    unix  2      [ ACC ]     STREAM     LISTENING     827412 23946/            

    /tmp/mysql.sock

    unix  2      [ ACC ]     STREAM     LISTENING     733272 12711/            

    ./mysql.sock

    可以用grep筛选一下,看看规律,找到有 :3306 的一行就好

用管道符给grep处理:

    [root@aslibra root]# netstat -nlp | grep :3306

    tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      23946/

    既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个

    读取出端口号

    [root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7'

    23946/

    意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字

    取/前面的数字就可以了,这里还是可以用awk处理

    [root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print $1 '

    23946

    意思是用/符号分割,取第一部分

    然后把这个数字传给kill就可以

    kill命令不能跟在管道符后面继续处理了,会出错的

    [root@aslibra root]# netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print

    $1 ' | kill

    kill: usage: kill [-s sigspec | -n signum | -sigspec] [pid | job]... or kill -l [sigspec]

    需要用到"[']"操作符,它可以执行一个语句,这个可以如此执行:

    kill [']netstat -nlp | grep :3306 | awk 'print $7' | awk -F"/" ' print $1 '[']

cmd批处理bat命令根据端口号一键关闭杀死对应进程程序

@(cmd批处理bat命令根据端口号一键关闭杀死对应进程程序)

cmd批处理bat命令根据端口号一键关闭杀死对应进程程序

使用场景和功能介绍

  • java开发者eclipse中启动多次启动tomcat时8080端口无法及时关闭可能需要此批处理。
  • windows上打开nginx.exe调试时不容易关闭时,可以使用此批处理关闭80端口即可。
  • 代码原理根据端口号netstat -aon | findstr "80"查到对应PID,再根据PID查找到进程名tasklist|findstr PID,再根据程序名杀死进程taskkill /f /t /im nginx.exe。这样杀死比较全,只根据PID杀死进程有时候并不能完全杀死相关进程故心血来潮写了此批处理。
  • 刚学批处理蹩脚的代码还请包含。

主界面

技术图片

下载地址

下载地址(蓝奏云)]
https://www.lanzous.com/i6syl8h

源代码


@echo off
title 根据服务端口号关闭对应进程。作者:劣徒5520,QQ:1092413979 
echo  ━━━━━━━━━━━━
echo     ┏┓   ┏┓
echo    ┏┛┻━━━┛┻┓
echo    ┃       ┃
echo    ┃   ━   ┃
echo    ┃ ┳┛ ┗┳ ┃
echo    ┃       ┃
echo    ┃   ┻   ┃
echo    ┃       ┃ 
echo    ┗━┓   ┏━┛
echo      ┃   ┃ ***根据服务端口号关闭对应进程。作者:劣徒5520,QQ:1092413979 ***
echo      ┃   ┃
echo      ┃   ┗━━━┓
echo      ┃       ┣┓
echo      ┃       ┏┛
echo      ┗┓┓┏━┳┓┏┛
echo       ┃┫┫ ┃┫┫
echo       ┗┻┛ ┗┻┛
echo  ━━━━━━━━━━━━
:start1
set /p duankou=请输入需要关闭的端口号:
setlocal enabledelayedexpansion
set queryResult=0
for /f "delims=  tokens=1" %%a in ('netstat -aon ^| findstr "%duankou%" ^|findstr "LISTENING"') do (
    set a1=%%a

    set isCanUse=0
    for /f "tokens=2 delims= " %%b in ("!a1!") do (
        set a2=%%b
        for /f "tokens=2 delims=:" %%c in ("!a2!") do (
            set a3=%%c
            
            if %duankou%==!a3! (
                
                set isCanUse=1
            
            
            )

        )
        if !isCanUse!==1 (
        
            echo 查询到匹配的进程信息--!a1!
            set queryResult=1

            for /f "tokens=5 delims= " %%d in ("!a1!") do (
                set killPid=%%d
                for /f "tokens=1 delims= " %%e in ('tasklist^|findstr  !killPid!') do (
                    set /p isConfirm=确认关闭%%e进程吗^?^(不了解的进程请不要乱关闭^)^(Y^/N^): 
                    set alreadyKilled=0
                    if !isConfirm!==y (
                        taskkill /f /t /im  %%e
                        set alreadyKilled=1
                    )
                    if !isConfirm!==Y (
                        taskkill /f /t /im  %%e
                        set alreadyKilled=1
                    )
                    if !alreadyKilled!==0 (
                        if !isConfirm! NEQ Y (
                            echo 已取消
                            set duankou=0
                            goto start1
                        )
                        if !isConfirm! NEQ Y (
                            echo 已取消
                            goto start1
                            set duankou=0
                        )
                    )
                )
            )
        )
    )
)
if !queryResult!==0 (
        echo 未找到对应进程
    )
goto start1
pause

以上是关于linux下怎么根据端口号杀死进程?的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统根据端口号来查看其进程并杀死进程

Windows - 杀死占用某个端口号的进程

sh linux下通过端口号杀死后台进程

cmd批处理bat命令根据端口号一键关闭杀死对应进程程序

Mac下使用终端查看某个端口号对应的进程和杀死进程

linux系统怎么kill进程