如何在Ubuntu上终止一个端口上的进程

873
我是一名有用的助手,可以进行文本翻译。以下是需要翻译的内容:

我正在尝试在Ubuntu的命令行中杀死一个特定端口的进程。

如果我运行此命令,我将获得端口:

sudo lsof -t -i:9001

so...now I want to run:

sudo kill 'sudo lsof -t -i:9001'

我收到了这个错误信息:

ERROR: garbage process ID "lsof -t -i:9001".
Usage:
  kill pid ...              Send SIGTERM to every process listed.
  kill signal pid ...       Send a signal to every process listed.
  kill -s signal pid ...    Send a signal to every process listed.
  kill -l                   List all signal names.
  kill -L                   List all signal names in a nice table.
  kill -l signal            Convert between signal numbers and names.

我尝试了 sudo kill 'lsof -t -i:9001'

12
FYI,Ubuntu相关问题在StackExchange(StackOverflow)网络的Ubuntu专区:http://askubuntu.com上被回答的机率更高。 - JScoobyCed
老实说,你应该使用fuser,因为它非常简单,但无论如何。 - CrazyVideoGamer
仅供个人使用 sudo kill -9 $(sudo lsof -t -i:3000) - Sasha Kos
30个回答

1775

您应该使用反引号(backtick),而不是普通的单引号:

sudo kill -9 `sudo lsof -t -i:9001`

如果那样不起作用,您也可以使用$()进行命令插值:
sudo kill -9 $(sudo lsof -t -i:9001)

11
@FrancescoGramano:除非必须使用,否则您不希望使用-9。 - zellio
2
当“sudo kill”无法杀死进程时,@putra.koreng的方法效果很好。 - Fangxin
3
如果以上方法无效,请尝试这个:https://dev59.com/dmox5IYBdhLWcg3wOx1i#50515868 - Arayan Singh
1
这个程序是独立于操作系统的还是只适用于Linux?如果只适用于Linux,那么即使使用这个命令也可以: os.system("fuser -k 8080/tcp"); - Ridhuvarshan
1
不再起作用了。 两个命令都只会出现帮助命令。 - Epic Speedy
显示剩余8条评论

421

2
如果不是root用户:sudo fuser -n tcp -k 9001 - JLavoie
2
谢谢,这对我有效。 - MD Jahid Hasan

159

在Ubuntu中: 1- 找出使用该进程的应用程序/进程,输入以下命令:

sudo netstat -lpn |grep :8080

然后按Enter键。

您将获得类似于此输出的结果

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

2- 我已经获取了进程ID,它是6782,现在这个进程正在使用8080端口。

3- 结束进程,输入:kill -p 6782

kill -9 6782

2
这对我没有用。即使我在Ubuntu 20.04上尝试使用sudo杀死进程。 - Muhammad Tariq
3
尝试使用"kill -9 {PID}"命令。 - CrazyVideoGamer
2
步骤3:回复:kill -p 6782,改为:kill -9 6782 -> 对我有效 - Le Nguyen
我使用了sudo,它起作用了。 - Zekarias Taye Hirpo
@MuhammadTariq 那么你在该端口上没有正在运行的进程。 - Praveen Patel
它每次都对我起作用。谢谢@Mohit Singh。 - Saikat Roy

122
在Ubuntu终端中杀死端口的最佳方法是使用fuser命令,例如:
fuser -k 9001/tcp

默认情况下,这会发送 SIGKILL 信号。


这在我的本地主机3000上没有起作用。 - Wayne

39

杀死运行在端口号 9001 上的进程

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


lsof   - list of files(Also used for to list related processes)

-t     - show only process ID

-i     - show only internet connections related process

:9001  - show only processes in this port number

kill   - command to kill the process

-9     - forcefully

sudo   - command to ask admin privilege(user id and password).

更多信息,您可以访问我的博客


37

有些进程无法通过普通的netstat命令显示,因此您需要使用sudo进行检查。

运行sudo netstat -lpn |grep :8080。系统运行的进程不会显示PID,要获取此进程的PID,您必须使用sudo运行它。

然后使用端口8080杀掉该进程。在这里,您可能也需要使用sudo。因此,要杀死此进程,请使用sudo kill -9 PID


24

使用killport命令:

sh killport 9001 

要下载Shell,您可以使用wget命令:

wget https://cdn.rawgit.com/abdennour/miscs.sh/e0aac343/killport

2
如果它不起作用,那么这意味着目标端口已经关闭。 - Abdennour TOUMI

19
killport <port>

在你的命令行界面中添加以下代码,并使用此别名。
killport () {
  PID=$(sudo lsof -t -i:$1)
  sudo kill -9 ${PID}
}

"下面的Bash代码"是什么意思? - miken32
我在“.bashrc”中添加的函数的截图已经添加。 - Towfiqul Islam
2
我最近看到的最佳答案! - JAN

15

为了根据端口杀死进程,我们首先要找到给定端口的相关pid,然后使用该pid进行杀死。

在我的情况下,我想获取3000端口的pid(进程ID):

netstat -ltnp | grep -w '3000'

然后找到正在监听TCP的PID

tcp6       0      0 :::3000                 :::*                    LISTEN      29972/node  

您将获得进程id29972

使用以下命令终止此进程

kill -9 29972

基于端口杀死进程的伪代码

 netstat -ltnp | grep -w 'PORT'

kill -9 PID

14

sudo kill -9 $(sudo lsof -t -i:9001) 对我很有效,或者你也可以使用

sudo kill -9 `sudo lsof -t -i:9001` 

将9001替换成你想要的端口号。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接