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

时间:2012-07-20 16:39:17

标签: linux unix port kill-process

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

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

31 个答案:

答案 0 :(得分:738)

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

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

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

答案 1 :(得分:485)

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

lsof -i:8080

要终止任何侦听端口8080的进程:

kill $(lsof -t -i:8080)

或更暴力:

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

-9对应于SIGKILL - terminate immediately/hard kill信号:请参阅List of Kill SignalsWhat is the purpose of the -9 option in the kill command?。如果未向kill指定信号,则TERM信号也称为{{发送1}}或-15,有时不足以终止进程。)。

答案 2 :(得分:226)

使用命令

 sudo netstat -plten |grep java

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

它将显示包含端口号和进程ID的进程列表

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

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

kill -9 16085

-9意味着该过程将被强行杀死。

答案 3 :(得分:98)

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

lsof -i:8090

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

像...一样的东西。

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

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

kill -9 75782

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

答案 4 :(得分:83)

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

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

答案 5 :(得分:58)

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

sudo lsof -t -i:8080

下面,

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

所以你现在可以使用以下命令轻松杀死你的PID:

sudo kill -9 <PID>

下面,

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

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

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

您可以看到以下链接 How to kill a process on a specific port on linux

答案 6 :(得分:37)

这会打印到<port_number>上运行的所有内容的进程ID:

fuser -n tcp <port_number> 

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

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

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

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

如果你经常这么做,你也可以将它放在一个函数中:

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

答案 7 :(得分:31)

要了解在特定端口上运行的服务的pid:

netstat -tulnap | grep :*port_num*

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

e.g

netstat -ap | grep :8080

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

现在:

kill -9 1880

请记住以root

运行所有命令

答案 8 :(得分:19)

获取任务的PID并杀死它。

lsof -ti:8080 | xargs kill

答案 9 :(得分:18)

尝试这样,

 sudo fuser -n tcp -k 8080

答案 10 :(得分:15)

首先需要运行(替换您的端口号):

fuser -k 3000/tcp

这将释放端口。运行上述命令后,运行:

service docker restart

您的问题已解决。

答案 11 :(得分:12)

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

  2. kill -9 [PID] 此命令终止进程

答案 12 :(得分:11)

Linux :首先,如果您知道端口,则可以找到此命令的PID:

netstat -tulpn 

例如: -

 Local Address  Foreign Address  State    PID/Program name

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

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

kill -9 PID

示例: -

kill -9 15986

答案 13 :(得分:11)

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

netstat -ap | grep :7070

控制台输出

  

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

根据 PID (进程标识号)

杀死服务
kill -9 3332

答案 14 :(得分:10)

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

netstat -plten | grep LISTEN | grep 8080

AIX

netstat -Aan | grep LISTEN | grep 8080

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

rmsock f100050000b05bb8 tcpcb

杀死进程。

答案 15 :(得分:7)

杀死特定端口上所有进程的最佳方法;

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

答案 16 :(得分:6)

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

答案 17 :(得分:6)

只需运行此命令。不要忘记用您的端口替换portnumber;)

  kill -9 $(sudo lsof -t -i:portnumber)

答案 18 :(得分:5)

运行以下命令以找到8080端口号PID:

sudo lsof -t -i:8080

您现在可以使用以下命令轻松杀死PID:

sudo杀死-9

您可以使用以下命令使用一个命令来杀死特定端口上的进程:

sudo kill -9 $(sudo lsof -t -i:8000)

答案 19 :(得分:4)

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

netstat -tulpn

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

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

例如:sudo netstat -lutnp | grep -w'8080' 像这样提供详细信息:

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

如果要使用pid终止进程,则kill -9 {PID}

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

如果无法访问,请使用sudo

答案 20 :(得分:4)

使用lsof and kill

的组合
root@localhost:~# lsof -i tcp:8080
COMMAND   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
java    23672 sine  238u  IPv6 3028222      0t0  TCP localhost:http-alt (LISTEN)

选择pid并使用kill

kill 23672

另外,您可以获得一支衬板

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

答案 21 :(得分:3)

我正在使用Yocto Linux系统,该系统的可用Linux工具数量有限。我想终止使用特定端口(1883)的进程。

首先,要查看我们正在监听的端口,我使用了以下命令:

root@root:~# netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:hostmon         0.0.0.0:*               LISTEN      
tcp        0      0 localhost.localdomain:domain 0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:9080            0.0.0.0:*               LISTEN      
tcp        0      0 0.0.0.0:1883            0.0.0.0:*               LISTEN      
tcp        0      0 :::hostmon              :::*                    LISTEN      
tcp        0      0 localhost:domain        :::*                    LISTEN      
tcp        0      0 :::ssh                  :::*                    LISTEN      
tcp        0      0 :::1883                 :::*                    LISTEN      

接下来,我通过以下方式使用端口1883找到了进程的名称:

root@root:~# fuser 1883/tcp
290 
root@root:~# ps | grep 290
  290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
12141 root      8444 S    grep 290

正如我们在上面看到的,使用端口1883的是程序/usr/sbin/mosquitto

最后,我终止了该过程:

root@root:~# systemctl stop mosquitto

我之所以使用systemctl是因为在这种情况下,它是一项systemd服务。

答案 22 :(得分:2)

这是Windows的解决方案:

C:\Users\Niroshan>netstat -ano|findstr "PID :8080"

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264

taskkill /pid 18264 /f

答案 23 :(得分:2)

就我而言,cent os在建议答案中存在一些问题。所以我用下面的解决方案:

  ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill

答案 24 :(得分:2)

  1. 首先检查流程netstat -lt
  2. 检查进程ID fuser <port number>/tcp
  3. 杀死在端口kill <process id>上运行的进程

答案 25 :(得分:1)

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

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

逐个杀死进程

kill -9 1858

答案 26 :(得分:0)

使用Git Bash的其他方法:

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

答案 27 :(得分:0)

建立@ veer7所说的内容:

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

$ 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

使用&#39; ps&#39;以及netstat报告的进程数

答案 28 :(得分:0)

如果端口上的服务没有响应,如何终止进程

timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi

它做什么

  1. 以一秒钟的时间开始“超时”,以使telnet退出
  2. '2>&1 | '管道错误消息而没有退出
  3. 如果错误消息包含“ Unable”,则运行kode杀死进程锁定端口8080

这可以放到文件中并从'sudo crontab'定期运行

答案 29 :(得分:0)

这将杀死在端口 80 上运行的程序

sudo fuser -k 80/tcp

答案 30 :(得分:-2)

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

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

来终止PID
相关问题