关于unix:如何杀死Linux上特定端口上运行的进程?

How to kill a process running on particular port in Linux?

我尝试使用tomcat /bin目录中的./shutdown.sh关闭tomcat。 但发现服务器没有正常关闭。 因此我无法重启我的tomcat正在端口8080上运行。

我想杀死在8080上运行的tomcat进程。 我首先想要在特定端口(8080)上运行进程列表,以便选择要杀死的进程。


fuser 8080/tcp将打印您在该端口上绑定的进程的PID。

而这个fuser -k 8080/tcp会杀死这个过程。

仅适用于Linux。更普遍的是使用lsof -i4(或IPv6用于6)。


要列出监听端口8080的任何进程:

1
lsof -i:8080

要杀死侦听端口8080的任何进程:

1
kill $(lsof -t -i:8080)

或者更猛烈地:

1
kill -9 $(lsof -t -i:8080)

(-9对应于SIGKILL - terminate immediately/hard kill信号:请参阅杀死信号列表以及kill命令中-9选项的用途是什么?如果没有为kill指定信号,则TERM信号也为-15soft kill被发送,有时不足以杀死进程。)


使用该命令

1
 sudo netstat -plten |grep java

使用grep java作为tomcat使用java作为其进程。

它将显示具有端口号和进程ID的进程列表

1
2
tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

/java之前的数字是进程ID。现在使用kill命令终止进程

1
kill -9 16085

-9暗示该过程将被强行杀死。


我会在特定端口上添加这个单行只能杀死LISTEN:

kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)


您可以使用lsof命令。
这里的端口号是8090

1
lsof -i:8090

此命令返回此端口上的打开进程列表。

就像是…

1
2
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 75782 eoin 5u IPv6 0x01c1c234 0t0 TCP localhost:8090 (LISTEN)

要释放端口,请使用它终止进程(进程ID为75782)...

1
kill -9 75782

这个对我有用。
这是原帖子的链接:链接


如果要终止在端口号8080上运行的进程,则首先需要找到8080端口进程标识号(PID),然后将其终止。运行以下命令查找8080端口号PID:

1
sudo lsof -t -i:8080

这里,

  • sudo - 命令管理员权限(用户ID和密码)。
  • lsof - 文件列表(也用于列出相关进程)
  • -t - 仅显示进程ID
  • -i - 仅显示与Internet连接相关的进程
  • :8080 - 仅显示此端口号中的进程

因此,您现在可以使用以下命令轻松终止PID:

1
sudo kill -9 <PID>

这里,

  • kill - 命令杀死进程
  • -9 - 有力地

您可以使用以下命令使用一个命令终止特定端口上的进程:

1
sudo kill -9 $(sudo lsof -t -i:8080)

有关更多信息,请参阅以下链接
如何在linux上的特定端口上终止进程


这将打印到stdout 上运行的所有内容的进程ID:

1
fuser -n tcp <port_number>

它还会向stderr打印一些东西,所以:

1
fuser -n tcp <port_number> 2> /dev/null

然后,我们可以将这些进程ID提供给kill命令:

1
sudo kill $(fuser -n tcp <port_number> 2> /dev/null)

如果你做了很多,你也可以将它放在一个函数中:

1
2
3
function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}

要知道在特定端口上运行的服务的pid:

1
netstat -tulnap | grep :*port_num*

您将获得该过程的描述。现在使用kill或kill -9 pid。容易被杀死。

例如

netstat -ap | grep :8080

1
tcp6       0      0 :::8080       :::*    LISTEN      1880/java

现在:

1
kill -9 1880

请记住以root运行所有命令


获取任务的PID并将其杀死。

1
lsof -ti:8080 | xargs kill


试试这样,

1
 sudo fuser -n tcp -k 8080

  • lsof -i tcp:8000
    此命令列出有关在端口8000中运行的进程的信息

  • kill -9 [PID]
    此命令会终止进程


  • Linux:首先,如果你知道端口,你可以找到这个命令的PID:

    1
    netstat -tulpn

    例:-

    1
    2
    3
     Local Address  Foreign Address  State    PID/Program name

      :::3000       :::*             LISTEN    15986/node

    然后你进行杀戮过程。运行以下命令:

    kill -9 PID

    示例: -

    杀了-9 15986


    Linux:如果您知道端口,则可以使用此命令:

    1
    netstat -plten | grep LISTEN | grep 8080

    AIX:

    1
    netstat -Aan | grep LISTEN | grep 8080

    然后,您将获取第一列(例如:f100050000b05bb8)并运行以下命令:

    1
    rmsock f100050000b05bb8 tcpcb

    杀人过程。


    kill -9 `fuser 8080/tcp|xargs -n 1`,此命令还会终止使用TCP连接侦听端口8080的进程


    您可以知道系统中运行的所有端口的列表及其详细信息(pid,地址等):

    1
    netstat -tulpn

    您可以通过以下命令提供端口号来了解特定端口号的详细信息:

    1
    sudo netstat -lutnp | grep -w '{port_number}'

    例如:sudo netstat -lutnp | grep -w'8080'
    详细信息将提供如下:

    1
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name

    如果你想使用pid杀死进程,那么:kill -9 {PID}

    如果要使用端口号终止进程:fuser -n tcp {port_number}

    如果您无法访问任何内容,请使用sudo


    选择端口号并在netstat命令中应用grep,如下所示

    1
    netstat -ap | grep :7070

    控制台输出

    tcp 0 0 :::7070 :::* LISTEN 3332/java

    基于PID(进程标识号)终止服务

    1
    kill -9 3332

    1
    2
    sudo apt-get install psmisc (or sudo yum install psmisc)
    sudo fuser 80/tcp

    结果:
    80 / tcp:1858 1867 1868 1869 1871

    一个一个地杀死进程

    杀死-9 1858


    以@ veer7所说的为基础:

    如果你想知道端口上的内容,请在杀死之前执行此操作。

    1
    2
    3
    4
    5
    6
    7
    $ sudo netstat -plten |grep java
    tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/java      
    tcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/java      
    tcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java      
    $ ps 25296
      PID TTY      STAT   TIME COMMAND
    25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

    使用'ps'和netstat报告的进程数


    与Git Bash的其他方式:

    1
    2
    3
    4
    5
    6
    7
    stopProcessByPortNumber() {
    port=":${1}"
    portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
    processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
    echo $processId
    taskkill -PID $processId -F
    }


    在Windows中,它将是netstat -ano | grep"8080",我们收到以下消息TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076

    我们可以使用taskkill /F /PID 10076终止PID