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

vee*_*er7 640 unix linux port kill-process

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

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

nud*_*dzo 822

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

fuser -k 8080/tcp将杀死这个过程.

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

  • 我使用linux,我得到`bash:fuser:command not found`. (9认同)
  • 它没有正确关闭端口.在父进程被终止后,端口进入TIME_WAIT状态.操作系统最终将在大约60秒后完全关闭端口.这意味着您不能重复使用该端口至少60秒(除非您将重用选项提供给套接字). (6认同)
  • @dbliss fuser是psmisc的一部分.如果你得到'fuser:command not found`,请安装psmisc.对于CentOS/RHEL 7,运行`sudo yum install psmisc` (6认同)
  • 这是否也将可能连接的套接字关闭到 8080? (2认同)
  • 在达尔文,必须使用不同版本的`fuser`.只需要一个文件,不支持`-k`. (2认同)
  • 'fuser -k -n tcp 8080'也会杀死这个过程 (2认同)

Fra*_*urt 599

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

lsof -i:8080
Run Code Online (Sandbox Code Playgroud)

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

kill $(lsof -t -i:8080)
Run Code Online (Sandbox Code Playgroud)

或者更猛烈地:

kill -9 $(lsof -t -i:8080)
Run Code Online (Sandbox Code Playgroud)

(-9对应于SIGKILL - terminate immediately/hard kill信号:参见杀戮信号列表kill命令中-9选项的用途是什么?.如果没有指定信号kill,TERM信号又称-15或被soft kill发送,有时不足以杀死一个过程.).

  • kill:usage:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...或kill -l [sigspec]这是我在执行命令时得到的内容 (6认同)
  • 也在我的Mac上工作 (4认同)
  • `lsof -t -i:8080 | xargs -r Kill`​​ 可以更好地处理空列表情况。 (4认同)
  • @SudhirBelagali用超级用户`sudo`做了你 (2认同)
  • 我想补充一点,有时你没有权限看到进程ID,在这种情况下你需要做`sudo lsof -i:8080`. (2认同)

vee*_*er7 244

使用该命令

 sudo netstat -plten |grep java
Run Code Online (Sandbox Code Playgroud)

使用grep java作为tomcat使用java它们的过程.

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

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java
Run Code Online (Sandbox Code Playgroud)

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

kill -9 16085
Run Code Online (Sandbox Code Playgroud)

-9 意味着这个过程将被强行杀死.

  • 您可能希望添加一个可能需要root权限才能通过`netstat`获取进程名称. (11认同)
  • @JonasWielicki你可以看到你拥有的拥有root权限的人. (2认同)

Gal*_*cha 139

我会在特定端口上仅为LISTEN添加此单行:

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

  • 我认为这应该是最好的答案.谢谢@Gal Bracha (5认同)
  • 这是最好的解决方案,因为它也不会杀死我的浏览器! (3认同)
  • 基于这个答案,我在`~/.bashrc`中创建了一个函数:`killp() {kill -9 $(lsof -t -i:"$1" -sTCP:LISTEN) }`以便能够使用它就像这个`killp 3000`。(不要忘记为 `{ }` 添加新行) (2认同)

dlm*_*tei 130

一个班轮

kill -9 $(lsof -t -i tcp:8080)
Run Code Online (Sandbox Code Playgroud)

说明此处使用的组合lsofkill

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)
Run Code Online (Sandbox Code Playgroud)

选择pid并使用 kill

kill 23672
Run Code Online (Sandbox Code Playgroud)


Kop*_*lyf 107

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

lsof -i:8090
Run Code Online (Sandbox Code Playgroud)

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

就像是…

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

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

kill -9 75782
Run Code Online (Sandbox Code Playgroud)

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

  • 这也是Mac OS上的版本 (2认同)

Ber*_*ğlu 76

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

kill -9 $(sudo lsof -t -i:8080)
Run Code Online (Sandbox Code Playgroud)


Mah*_*fuz 71

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

sudo lsof -t -i:8080
Run Code Online (Sandbox Code Playgroud)

这里,

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

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

sudo kill -9 <PID>
Run Code Online (Sandbox Code Playgroud)

这里,

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

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

sudo kill -9 $(sudo lsof -t -i:8080)
Run Code Online (Sandbox Code Playgroud)

有关更多信息,您可以看到以下链接 如何在linux上的特定端口上终止进程


Bri*_*son 39

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

fuser -n tcp <port_number> 
Run Code Online (Sandbox Code Playgroud)

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

fuser -n tcp <port_number> 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

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

sudo kill $(fuser -n tcp <port_number> 2> /dev/null)
Run Code Online (Sandbox Code Playgroud)

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

function killport() {
    sudo kill $(fuser -n tcp $1 2> /dev/null)
}
Run Code Online (Sandbox Code Playgroud)


小智 33

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

netstat -tulnap | grep :*port_num*
Run Code Online (Sandbox Code Playgroud)

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

例如

netstat -ap | grep :8080

tcp6       0      0 :::8080       :::*    LISTEN      1880/java 
Run Code Online (Sandbox Code Playgroud)

现在:

kill -9 1880
Run Code Online (Sandbox Code Playgroud)

记得以所有命令运行 root


Rah*_*arg 28

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

lsof -ti:8080 | xargs kill
Run Code Online (Sandbox Code Playgroud)

  • 也适用于端口范围,例如 `lsof -ti:8080-8089 | xargs 杀死`。 (2认同)

Ans*_*han 28

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

fuser -k 3000/tcp
Run Code Online (Sandbox Code Playgroud)

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

service docker restart
Run Code Online (Sandbox Code Playgroud)

你的问题就解决了。

  • 最佳答案就在这里! (2认同)

小智 24

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

sudo fuser -k 80/tcp
Run Code Online (Sandbox Code Playgroud)


Adi*_*asi 20

试试这样,

 sudo fuser -n tcp -k 8080
Run Code Online (Sandbox Code Playgroud)


小智 13

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

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


小智 12

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

netstat -tulpn 
Run Code Online (Sandbox Code Playgroud)

例:-

 Local Address  Foreign Address  State    PID/Program name

  :::3000       :::*             LISTEN    15986/node 
Run Code Online (Sandbox Code Playgroud)

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

kill -9 PID

示例: -

杀了-9 15986


Lov*_*uri 11

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

netstat -ap | grep :7070
Run Code Online (Sandbox Code Playgroud)

控制台输出

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

根据PID(进程标识号)终止服务

kill -9 3332
Run Code Online (Sandbox Code Playgroud)


小智 11

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

须藤 lsof -t -i:8080

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

须藤杀 -9

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

须藤杀 -9 $(须藤 lsof -t -i:8000)


ben*_*oez 10

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

netstat -plten | grep LISTEN | grep 8080
Run Code Online (Sandbox Code Playgroud)

AIX:

netstat -Aan | grep LISTEN | grep 8080
Run Code Online (Sandbox Code Playgroud)

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

rmsock f100050000b05bb8 tcpcb
Run Code Online (Sandbox Code Playgroud)

杀人过程.


小智 8

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

netstat -tulpn
Run Code Online (Sandbox Code Playgroud)

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

sudo netstat -lutnp | grep -w '{port_number}'
Run Code Online (Sandbox Code Playgroud)

例如:sudo netstat -lutnp | grep -w'8080'的详细信息将如下所示:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
Run Code Online (Sandbox Code Playgroud)

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

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

使用sudo,如果你不能够访问任何。


小智 6

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


小智 6

sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp
Run Code Online (Sandbox Code Playgroud)

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

一个一个进程杀掉

杀-9 1858


mon*_*ica 6

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

  kill -9 $(sudo lsof -t -i:portnumber)
Run Code Online (Sandbox Code Playgroud)


Nir*_*ake 6

这是 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
Run Code Online (Sandbox Code Playgroud)

  • 问题问的是Linux。 (2认同)

Dan*_*son 5

我正在开发 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      
Run Code Online (Sandbox Code Playgroud)

接下来,我通过以下方式找到使用端口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
Run Code Online (Sandbox Code Playgroud)

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

最后,我杀死了这个进程:

root@root:~# systemctl stop mosquitto
Run Code Online (Sandbox Code Playgroud)

我使用它是systemctl因为在本例中它是一个 systemd 服务。