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

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

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

2148720 次浏览

使用命令

 sudo netstat -plten |grep java

使用grep java作为tomcat使用java作为它们的进程。

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

tcp6       0      0 :::8080                 :::*                    LISTEN1000       30070621    16085/java

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

kill -9 16085

-9意味着进程将被强制杀死。

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

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

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

这将打印到stdout<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)}

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

netstat -plten | grep LISTEN | grep 8080

AIX

netstat -Aan | grep LISTEN | grep 8080

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

rmsock f100050000b05bb8 tcpcb

杀死过程。

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

netstat -tulnap | grep :*port_num*

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

例如

netstat -ap | grep :8080

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

现在:

kill -9 1880

记住以root运行所有命令

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

lsof -i:8090

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

像是…

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

要释放端口,请使用它杀死进程(进程ID为75782)…

kill -9 75782

这对我很有用。以下是原文链接:链接

像这样尝试,

 sudo fuser -n tcp -k 8080

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

lsof -i:8080

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

kill $(lsof -t -i:8080)

或更猛烈地:

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

-9对应于SIGKILL - terminate immediately/hard kill信号:参见杀死信号列表杀死命令中-9选项的目的是什么?。如果没有指定kill信号,则发送TERM信号,即-15soft kill,这有时不足以杀死进程。)。

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

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

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

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

备选案文1仅在特定端口上杀死LISTEN的单行代码:

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

备选案文2如果你安装了npm,你也可以运行

npx kill-port 3000

kill -9 `fuser 8080/tcp|xargs -n 1`,此命令还使用传输控制协议杀死监听端口8080的进程

以@veer7所说的为基础:

如果你想知道港口上有什么,在你杀死它之前做这件事。

$ sudo netstat -plten |grep javatcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1000       906726      25296/javatcp6       0      0 :::8009                 :::*                    LISTEN      1000       907503      25296/javatcp6       0      0 :::8080                 :::*                    LISTEN      1000       907499      25296/java$ ps 25296PID TTY      STAT   TIME COMMAND25296 ?        Sl     0:16 /usr/lib/jvm/java-8-openjdk-amd64/bin/java -Dcatalina.base=/hom

使用ps和netstat报告的进程数

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

netstat -tulpn

示例:-

 Local Address  Foreign Address  State    PID/Program name
:::3000       :::*             LISTEN    15986/node

然后你执行杀死过程。运行以下命令:

ile-9pid

示例:-

杀-9 15986

如果您想杀死在端口号8080上运行的进程,那么首先需要找到8080端口进程标识号(PID),然后杀死它。运行以下命令查找8080端口号PID:

sudo lsof -t -i:8080

这里,

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

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

sudo kill -9 <PID>

这里,

  • k-命令终止进程
  • -9-强力

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

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

更多内容可以参考以下链接如何在Linux上的特定端口上杀死进程

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

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

一个接一个地杀死过程

杀-9 1858

获取任务的PID并杀死它。

lsof -ti:8080 | xargs kill

使用Git Bash的其他方法:

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

您可以知道系统中的正在运行的所有端口列表及其详细信息(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

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

netstat -ap | grep :7070

控制台输出

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

根据PID(进程标识号)杀死服务

kill -9 3332

一个班轮,节省时间

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

这里的解释:使用lsofkill的组合

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

选择pid并使用kill

kill 23672

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

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

在我的情况下,cent os在建议的答案中存在一些问题。所以我使用了以下解决方案:

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

我正在开发一个YoctoLinux系统,该系统具有一组有限的可用Linux工具。我想杀死使用特定端口(1883)的进程。

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

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

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

root@root:~# fuser 1883/tcp290root@root:~# ps | grep 290290 mosquitt 25508 S    /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf12141 root      8444 S    grep 290

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

最后,我杀了这个过程:

root@root:~# systemctl stop mosquitto

我使用了systemctl,因为在这种情况下它是一个system d服务。

  1. 首先检查进程netstat -lt
  2. 检查进程idfuser <port number>/tcp
  3. 终止在端口kill <process id>上运行的进程

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

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

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

sudo lsof-t-i: 8080

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

sudo杀-9

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

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

这是Windows的解决方案:

C:\Users\Niroshan>netstat -ano|findstr "PID :8080"
Proto Local Address Foreign Address State PIDTCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264
taskkill /pid 18264 /f

首先你需要做的是运行(用你的端口号替换):

fuser -k 3000/tcp

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

service docker restart

你的问题解决了。

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

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

它的作用

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

这可以放置在文件中并从“sudo crontab”定期运行

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

sudo fuser -k 80/tcp

只有这个命令为我工作:

ps -aux | grep 8000

然后:

sudo kill <PID>

使用此脚本,它比其他选项更用户友好,并检查端口是否实际使用。

用法:openport 1234

openport() {# sed = second line https://stackoverflow.com/a/1429628/152711# awk = second word https://unix.stackexchange.com/a/174038processId=$(lsof -i tcp:$1 | sed -n 2p | awk '{print $2}')if [ ! -z "$processId" ] # Non-null https://www.cyberciti.biz/faq/bash-shell-find-out-if-a-variable-has-null-value-or-not/thenecho Killing $processIdkill -9 $processIdelseecho No process foundfi}

这对我在Mac工作

sudo kill -9 $(netstat -vnap tcp | grep PORT | awk -F " " '{print $9}')