Veer7
Veer7

Reputation: 21513

How to kill a process running on particular port in Linux?

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

Answers (30)

mayo-s
mayo-s

Reputation: 65

There is an open source project doing exactly what is needed (for linux, macos and windows): killport

Upvotes: 0

Angus
Angus

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

nudzo
nudzo

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

Gal Bracha
Gal Bracha

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

dlmeetei
dlmeetei

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

Freewalker
Freewalker

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

Nishan B
Nishan B

Reputation: 855

This worked for me in mac

sudo kill -9 $(netstat -vnap tcp | grep PORT | awk -F " " '{print $9}')

Upvotes: 2

reza_khalafi
reza_khalafi

Reputation: 6554

Just this commands work for me:

ps -aux | grep 8000

and then:

sudo kill <PID>

Upvotes: 3

Asad Ullah
Asad Ullah

Reputation: 483

This will kill programs running on port 80

sudo fuser -k 80/tcp

Upvotes: 26

Punnerud
Punnerud

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

  1. Start 'timeout' with one second, to make telnet exit
  2. ' 2>&1 | ' pipe error-message without exiting
  3. If error-message contains 'Unable', then run the kode to kill process locking port 8080

This can ble placed in a file and run regulary from 'sudo crontab'

Upvotes: 1

Anshuman Bardhan
Anshuman Bardhan

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

Niroshan Ratnayake
Niroshan Ratnayake

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

RajuS
RajuS

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

monica
monica

Reputation: 1484

Simply run this command. Don't forget to replace portnumber, with your port ;)

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

Upvotes: 10

Gunjan Paul
Gunjan Paul

Reputation: 541

  1. first check the process netstat -lt
  2. check process id fuser <port number>/tcp
  3. kill the process running on the port kill <process id>

Upvotes: 4

Daniel Jonsson
Daniel Jonsson

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

Kamesh Jungi
Kamesh Jungi

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

Berkay Kirmizioglu
Berkay Kirmizioglu

Reputation: 1185

Best way to kill all processes on a specific port;

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

Upvotes: 83

Lova Chittumuri
Lova Chittumuri

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

YAP
YAP

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

Lucas Moyano Angelini
Lucas Moyano Angelini

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

Rahul Garg
Rahul Garg

Reputation: 4349

Get the PID of the task and kill it.

lsof -ti:8080 | xargs kill

Upvotes: 43

Franck Dernoncourt
Franck Dernoncourt

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

Fadid
Fadid

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

Mahfuz
Mahfuz

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,

  • sudo - command to ask admin privilege(user id and password).
  • lsof - list of files(Also used for to list related processes)
  • -t - show only process ID
  • -i - show only internet connections related process
  • :8080 - show only processes in this port number

So you can now easily kill your PID using following command:

sudo kill -9 <PID>

Here,

  • kill - command to kill the process
  • -9 - forcefully

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

Kundan Kumar
Kundan Kumar

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

Veer7
Veer7

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

JesseBoyd
JesseBoyd

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

Harshit Garg
Harshit Garg

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

Chaklader
Chaklader

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

Related Questions