Reputation: 21513
I tried to close the tomcat using ./shutdown.sh
from tomcat /bin
directory. But found that the server was not closed properly. And thus I was unable to restart
My tomcat is running on port 8080
.
I want to kill the tomcat process running on 8080
. I first want to have the list of processes running on a specific port (8080) in order to select which process to kill.
Upvotes: 1515
Views: 3083569
Reputation: 65
There is an open source project doing exactly what is needed (for linux, macos and windows): killport
Upvotes: 0
Reputation: 158
My personal way to solve this issue can be found is this gist I made, in the gist the first step is to run:
sudo lsof -i [PROTOCOL]:[PORT]
And then run:
sudo kill -9 [PROCESS ID]
Upvotes: 5
Reputation: 18594
This fuser 8080/tcp
will print you PID of process bound on that port.
And this fuser -k 8080/tcp
will kill that process.
Works on Linux only. More universal is use of lsof -i4
(or 6 for IPv6).
General form:
# list the TCP process bound to port PORT
fuser PORT/tcp
# Example: list the TCP process bound to port 8080
fuser 8080/tcp
# list the UDP process bound to port PORT
fuser PORT/udp
# Example: list the UDP process bound to port 8080
fuser 8080/udp
Upvotes: 1801
Reputation: 20021
Option 1 A One-liner to kill only LISTEN on specific port:
kill -9 $(lsof -t -i:3000 -sTCP:LISTEN)
Option 2 If you have npm installed you can also run
npx kill-port 3000
Upvotes: 375
Reputation: 10391
One liner, a time saver
kill -9 $(lsof -t -i tcp:8080)
Explanation here: use a combination of lsof
and 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)
select pid and use kill
kill 23672
Upvotes: 259
Reputation: 7355
Using this script, which is more user-friendly than other options and checks that the port is actually in use.
Usage: openport 1234
openport() {
# sed = second line https://stackoverflow.com/a/1429628/152711
# awk = second word https://unix.stackexchange.com/a/174038
processId=$(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/
then
echo Killing $processId
kill -9 $processId
else
echo No process found
fi
}
Upvotes: 1
Reputation: 855
This worked for me in mac
sudo kill -9 $(netstat -vnap tcp | grep PORT | awk -F " " '{print $9}')
Upvotes: 2
Reputation: 6554
Just this commands work for me:
ps -aux | grep 8000
and then:
sudo kill <PID>
Upvotes: 3
Reputation: 483
This will kill programs running on port 80
sudo fuser -k 80/tcp
Upvotes: 26
Reputation: 8081
How to kill process if the service on the port is not responding
timeout 1 telnet localhost 8080 2>&1 | if grep -q 'Unable'; then sudo kill -9 $(sudo lsof -t -i:8080); fi
What it does
This can ble placed in a file and run regulary from 'sudo crontab'
Upvotes: 1
Reputation: 2298
First you need to do is run (replace with your port number):
fuser -k 3000/tcp
This will release the port. After you run the above command run:
service docker restart
And your problem is resolved.
Upvotes: 37
Reputation: 3801
This is the solution for 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
Upvotes: 6
Reputation: 201
Run the following command to find 8080 port number PID:
sudo lsof -t -i:8080
You can now easily kill your PID using following command:
sudo kill -9
You can use one command to to kill a process on a specific port using the following command:
sudo kill -9 $(sudo lsof -t -i:8000)
Upvotes: 19
Reputation: 1484
Simply run this command. Don't forget to replace portnumber
, with your port ;)
kill -9 $(sudo lsof -t -i:portnumber)
Upvotes: 10
Reputation: 541
netstat -lt
fuser <port number>/tcp
kill <process id>
Upvotes: 4
Reputation: 3931
I'm working on a Yocto Linux system that has a limited set of available Linux tools. I wanted to kill the process that was using a particular port (1883).
First, to see what ports we are listening to I used the following command:
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
Next, I found the name of the process using port 1883 in the following way:
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
As we can see above, it's the program /usr/sbin/mosquitto
that's using port 1883.
Lastly, I killed the process:
root@root:~# systemctl stop mosquitto
I used systemctl
becuase in this case it was a systemd service.
Upvotes: 5
Reputation: 6251
In my case cent os has some issue in suggested answer. So I used following solution :
ss -tanp | grep 65432 | head -1 | grep -Po "(?<=pid=).*(?=,)" | xargs kill
Upvotes: 3
Reputation: 1185
Best way to kill all processes on a specific port;
kill -9 $(sudo lsof -t -i:8080)
Upvotes: 83
Reputation: 3323
Choose the port number and apply the grep in netstat command as shown below
netstat -ap | grep :7070
Console Output
tcp 0 0 :::7070 :::* LISTEN 3332/java
Kill the service based on PID ( Process Identification Number )
kill -9 3332
Upvotes: 22
Reputation: 471
You can know list of all ports running in system along with its details (pid, address etc.) :
netstat -tulpn
You can know details of a particular port number by providing port number in following command :
sudo netstat -lutnp | grep -w '{port_number}'
ex: sudo netstat -lutnp | grep -w '8080' Details will be provided like this :
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
if you want to kill a process using pid then : kill -9 {PID}
if you want to kill a process using port number : fuser -n tcp {port_number}
use sudo
if you are not able to access any.
Upvotes: 16
Reputation: 368
Other way with Git Bash:
stopProcessByPortNumber() {
port=":${1}"
portStrLine="$(netstat -ano | findstr LISTENING | findstr $port)"
processId="$(grep -oP '(\d+)(?!.*\d)' <<< $portStrLine)"
echo $processId
taskkill -PID $processId -F
}
Upvotes: 3
Reputation: 4349
Get the PID of the task and kill it.
lsof -ti:8080 | xargs kill
Upvotes: 43
Reputation: 83437
To list any process listening to the port 8080:
lsof -i:8080
To kill any process listening to the port 8080:
kill $(lsof -t -i:8080)
or more violently:
kill -9 $(lsof -t -i:8080)
(-9
corresponds to the SIGKILL - terminate immediately/hard kill
signal: see List of Kill Signals and What is the purpose of the -9 option in the kill command?. If no signal is specified to kill
, the TERM signal a.k.a. -15
or soft kill
is sent, which sometimes isn't enough to kill a process.).
Upvotes: 1497
Reputation: 1298
sudo apt-get install psmisc (or sudo yum install psmisc)
sudo fuser 80/tcp
Result: 80/tcp: 1858 1867 1868 1869 1871
Kill process one by one
kill -9 1858
Upvotes: 6
Reputation: 1345
If you want to kill a process running on port number 8080 then first you need to find the 8080 port process identification number(PID) and then kill it. Run the following command to find 8080 port number PID:
sudo lsof -t -i:8080
Here,
So you can now easily kill your PID using following command:
sudo kill -9 <PID>
Here,
You can use one command to to kill a process on a specific port using the following command:
sudo kill -9 $(sudo lsof -t -i:8080)
For more you can see the following link How to kill a process on a specific port on linux
Upvotes: 97
Reputation: 151
Linux: First you can find PID of this command if you know the port :
netstat -tulpn
example:-
Local Address Foreign Address State PID/Program name
:::3000 :::* LISTEN 15986/node
You then take the kill process. run the following command:
kill -9 PID
Expample: -
kill -9 15986
Upvotes: 15
Reputation: 21513
Use the command
sudo netstat -plten |grep java
used grep java
as tomcat
uses java
as their processes.
It will show the list of processes with port number and process id
tcp6 0 0 :::8080 :::* LISTEN
1000 30070621 16085/java
the number before /java
is a process id. Now use kill
command to kill the process
kill -9 16085
-9
implies the process will be killed forcefully.
Upvotes: 399
Reputation: 1106
to build on what @veer7 said:
if you want to know what was on the port, do this before you kill it.
$ 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
Use 'ps' and the number of the process that netstat reported back
Upvotes: 2
Reputation: 2269
kill -9 `fuser 8080/tcp|xargs -n 1`
, this commands also kills the process that listens on port 8080 with TCP connection
Upvotes: 7
Reputation: 169
In Windows, it will be netstat -ano | grep "8080"
and we get the following message TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10076
WE can kill the PID using taskkill /F /PID 10076
Upvotes: -1