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

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


当前回答

Lsof -i tcp:8000 该命令列出8000端口上运行的进程信息 kill -9 [PID] 该命令终止进程

其他回答

输出所有在<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)
}

我正在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/ mosquito。

最后,我终止了这个过程:

root@root:~# systemctl stop mosquitto

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

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

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

逐个杀死进程

杀死-9 1858

Git Bash的其他方式:

stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -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,请使用sudo。