【发布时间】:2012-07-19 23:29:34
【问题描述】:
我尝试使用来自 tomcat /bin 目录的./shutdown.sh 关闭 tomcat。但是发现服务器没有正常关闭。因此我无法重新启动
我的 tomcat 正在端口 8080 上运行。
我想杀死在8080 上运行的tomcat 进程。我首先想让进程列表在特定端口 (8080) 上运行,以便选择要杀死的进程。
【问题讨论】:
标签: linux unix port kill-process
我尝试使用来自 tomcat /bin 目录的./shutdown.sh 关闭 tomcat。但是发现服务器没有正常关闭。因此我无法重新启动
我的 tomcat 正在端口 8080 上运行。
我想杀死在8080 上运行的tomcat 进程。我首先想让进程列表在特定端口 (8080) 上运行,以便选择要杀死的进程。
【问题讨论】:
标签: linux unix port kill-process
fuser 8080/tcp 将打印绑定在该端口上的进程的 PID。
而这个fuser -k 8080/tcp 会杀死那个进程。
仅适用于 Linux。更普遍的是使用lsof -i4(或 6 用于 IPv6)。
【讨论】:
fuser。只取文件,不支持-k。
fuser: command not found,请安装 psmisc。对于 CentOS/RHEL 7,运行 sudo yum install psmisc
列出任何监听 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 Signals 和What is the purpose of the -9 option in the kill command?。如果没有为kill 指定信号,则发送TERM 信号又名-15 或soft kill,有时不足以杀死一个进程。)。
【讨论】:
sudo 一起做吗
sudo lsof -i:8080。
使用命令
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 表示进程将被强制终止。
【讨论】:
netstat 获取进程名称。
sudo netstat -plten | grep :8080 即使在您不了解应用程序的情况下也可以使用。这发现了一个 lsof -i 没有为我找到的 ruby 进程。
netstat 是 the deprecated alternative 到 ss。 Here 使用示例。
选项 1 仅在特定端口上杀死 LISTEN 的单线:
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)`
选项2如果你安装了npm,你也可以运行
npx kill-port 3000
【讨论】:
~/.bashrc:killp() { kill -9 $(lsof -t -i:"$1" -sTCP:LISTEN) } 中创建了一个函数,以便能够像这样使用它killp 3000。 (不要忘记为{ } 添加新行)
一个班轮
kill -9 $(lsof -t -i tcp:8080)
此处说明:使用lsof和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
【讨论】:
您可以使用 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
【讨论】:
如果你想杀死一个在 8080 端口上运行的进程,那么首先你需要找到 8080 端口的进程标识号(PID)然后杀死它。运行以下命令查找8080端口号PID:
sudo lsof -t -i:8080
这里,
所以您现在可以使用以下命令轻松杀死您的 PID:
sudo kill -9 <PID>
这里,
您可以使用以下命令使用一个命令来终止特定端口上的进程:
sudo kill -9 $(sudo lsof -t -i:8080)
更多内容可以看下面的链接 How to kill a process on a specific port on linux
【讨论】:
sudo kill -9 $(sudo lsof -t -i:8080) 为我工作
Ubuntu
杀死特定端口上所有进程的最佳方法;
kill -9 $(sudo lsof -t -i:8080)
【讨论】:
这会将<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)
}
【讨论】:
要知道在特定端口上运行的服务的 pid:
netstat -tulnap | grep :*port_num*
您将获得该过程的描述。现在使用 kill 或 kill -9 pid。很容易被杀死。
例如
netstat -ap | grep :8080
tcp6 0 0 :::8080 :::* LISTEN 1880/java
现在:
kill -9 1880
记得以root运行所有命令
【讨论】:
获取任务的PID并杀死它。
lsof -ti:8080 | xargs kill
【讨论】:
lsof -ti:8080-8089 | xargs kill。
首先你需要做的是运行(替换为你的端口号):
fuser -k 3000/tcp
这将释放端口。运行上述命令后运行:
service docker restart
你的问题已经解决了。
【讨论】:
试试这样,
sudo fuser -n tcp -k 8080
【讨论】:
选择端口号并在 netstat 命令中应用 grep,如下所示
netstat -ap | grep :7070
控制台输出
tcp 0 0 :::7070 :::* LISTEN 3332/java
根据PID(进程标识号)杀死服务
kill -9 3332
【讨论】:
lsof -i tcp:8000
该命令列出8000端口运行的进程信息
kill -9 [PID]
该命令杀死进程
【讨论】:
Linux:如果你知道端口,你可以使用这个命令:
netstat -plten | grep LISTEN | grep 8080
AIX:
netstat -Aan | grep LISTEN | grep 8080
然后取第一列(例如:f100050000b05bb8)并运行以下命令:
rmsock f100050000b05bb8 tcpcb
杀死进程。
【讨论】:
Linux:如果你知道端口,首先你可以找到这个命令的PID:
netstat -tulpn
例子:-
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
然后您执行 kill 进程。运行以下命令:
杀死 -9 PID
示例:-
杀死 -9 15986
【讨论】:
运行以下命令查找8080端口号PID:
sudo lsof -t -i:8080
您现在可以使用以下命令轻松杀死您的 PID:
sudo kill -9
您可以使用以下命令使用一个命令来终止特定端口上的进程:
sudo kill -9 $(sudo lsof -t -i:8000)
【讨论】:
您可以了解系统中所有正在运行的端口的列表及其详细信息(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。
【讨论】:
kill -9 `fuser 8080/tcp|xargs -n 1`,此命令还会杀死使用 TCP 连接侦听端口 8080 的进程
【讨论】:
只需运行此命令。不要忘记用你的端口替换portnumber ;)
kill -9 $(sudo lsof -t -i:portnumber)
【讨论】:
这将杀死在端口 80 上运行的程序
sudo fuser -k 80/tcp
【讨论】:
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp
结果: 80/tcp:1858 1867 1868 1869 1871
一一杀死进程
杀死 -9 1858
【讨论】:
这是 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
【讨论】:
我正在开发一个 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
正如我们在上面看到的,是程序 /usr/sbin/mosquitto 使用了 1883 端口。
最后,我终止了进程:
root@root:~# systemctl stop mosquitto
我使用了systemctl,因为在这种情况下它是一个系统服务。
【讨论】:
netstat -lt
fuser <port number>/tcp
kill <process id>上运行的进程
【讨论】:
Git Bash 的其他方式:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
【讨论】:
就我而言,cent os 在建议的答案中存在一些问题。所以我使用了以下解决方案:
ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill
【讨论】:
以@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
使用 'ps' 和 netstat 报告的进程号
【讨论】:
如果端口上的服务没有响应,如何杀死进程
timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi
它的作用
这可以放在一个文件中并从'sudo crontab'定期运行
【讨论】: