วิธีการฆ่ากระบวนการในพอร์ตบน Ubuntu


488

ฉันพยายามที่จะฆ่ากระบวนการในบรรทัดคำสั่งสำหรับพอร์ตเฉพาะในอูบุนตู

ถ้าฉันใช้คำสั่งนี้ฉันจะได้รับพอร์ต:

sudo lsof -t -i:9001

ดังนั้น ... ตอนนี้ฉันต้องการเรียกใช้:

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'เช่นกัน


9
FYI, คำถาม Ubuntu มีโอกาสที่ดีกว่าที่จะได้รับคำตอบในส่วน Ubuntu ของเครือข่าย StackExchange (StackOverflow): askubuntu.com
JScoobyCed

คำตอบ:


900

คุณต้องการใช้ backtick ไม่ใช่เห็บธรรมดา:

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

หากไม่ได้ผลคุณสามารถใช้$()สำหรับการแก้ไขคำสั่งด้วย:

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

43
คุณลืมที่จะเพิ่มตัวเลือกสัญญาณ ควรอ่าน:sudo kill -9 $(sudo lsof -t -i:9001)
Francesco Gramano

7
@FrancescoGramano: คุณไม่ต้องการใช้ -9 เว้นแต่คุณจะต้อง
zellio

2
เมื่อsudo killไม่สามารถฆ่ากระบวนการวิธีการของ @ putra.koreng ทำงานได้ดี
Fangxin

3
หากด้านบนไม่ทำงานให้ลองทำดังนี้: stackoverflow.com/a/50515868/9339242
Arayan Singh

1
ระบบปฏิบัติการนี้เป็นอิสระหรือเฉพาะลินุกซ์? ถ้าเฉพาะ Linux แล้วคำสั่งนี้ก็ใช้ได้os.system("fuser -k 8080/tcp");
Ridhuvarshan


78

สำหรับ UBUNTU 1- ค้นหาแอปพลิเคชัน / กระบวนการที่ใช้รุ่น pro พิมพ์:

sudo netstat -lpn |grep :8080

และกด Enter

คุณจะได้ผลลัพธ์ที่คล้ายกับอันนี้

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

2- ฉันได้รับหมายเลขกระบวนการซึ่งก็คือ 6782 ตอนนี้เป็นกระบวนการที่ใช้พอร์ต 8080

3- ฆ่ากระบวนการพิมพ์: kill 6782

kill 6782

3
การตอบสั้นและกรอบ
Vikas Kukreti

1
ทำงานอย่างสมบูรณ์แบบ
Tyler Bell

คุณช่วยกรุณาเขียนว่าคุณใช้คำสั่งข้างต้นได้อย่างไร?
Mohit Singh

1
ทำงานได้ยอดเยี่ยมในขณะที่คำสั่งใน asnwers ที่มี upvotes มากขึ้นไม่พบในเซิร์ฟเวอร์ Ubuntu 18.04 ของฉัน ขอบคุณ!
Salivan

38

วิธีที่ดีที่สุดในการฆ่าพอร์ตในอูบุนตูเทอร์มินัลคือ fuser -k 9001/tcp


3
ทำงานไร้ที่ติสำหรับฉัน
พบกับ Zaveri

มันก็ใช้ได้ผลเช่นกันสำหรับฉัน นี่ควรเป็นคำตอบที่ยอมรับได้
CodeSlave

35

มีกระบวนการบางอย่างที่ไม่ได้แสดงให้เห็นว่าการใช้คำสั่ง netstat sudoปกติดังนั้นคุณต้องตรวจสอบได้โดยใช้

sudo netstat -lpn |grep :8080Do กระบวนการทำงานโดยระบบจะไม่แสดง PID เพื่อรับ PID ของกระบวนการนี้คุณจะต้องเรียกใช้โดยใช้sudo

และจากนั้น killl 8080ขั้นตอนโดยใช้พอร์ต คุณอาจต้องใช้sudoที่นี่เช่นกัน ดังนั้นเพื่อฆ่ากระบวนการนี้ใช้sudo kill -9 PID


19

ใช้คำสั่งkillport :

sh killport 9001 

ในการดาวน์โหลดเชลล์คุณสามารถใช้wget:

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

1
หากไม่ทำงานแสดงว่าพอร์ตเป้าหมายปิดไปแล้ว
Abdennour TOUMI

17

หากต้องการฆ่าบริการพอร์ตในอูบุนตูให้ป้อนคำสั่งด้านล่างในเทอร์มินัล

ในอาคารผู้โดยสาร:

sudo fuser -k port/tcp
sudo fuser -k 8001/tcp

คนง่าย ๆ คนนี้ทำได้ดีมาก
Tri

15

คุณสามารถใช้ fuser เพื่อทำเช่นนั้นได้ (ส่ง SIGKILL โดยค่าเริ่มต้น): sudo fuser -k 9001/tcp


15

เพียงแค่ป้อน

    fuser -k -n tcp 3000

ใน terminal โดยที่ 3000 คือหมายเลขพอร์ตของคุณ


1
using fuser: แสดงว่ากระบวนการใดใช้ไฟล์ชื่อซ็อกเก็ตหรือระบบไฟล์ -k: แทนการฆ่า -n: Netstat tcp: นั่นเป็นโปรโตคอลที่ใช้พอร์ตของคุณ 3000: พอร์ตที่กำหนดเองที่นี่คือลิงค์: askubuntu.com/questions / 207609 / i-cant-kill-a-port-process
Kaushik shrimali

12

เพื่อฆ่ากระบวนการที่ทำงานบนหมายเลขพอร์ต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).

เพื่อเพิ่มเติมคุณสามารถเยี่ยมชมบล็อกของฉัน


11

ในการฆ่ากระบวนการตามพอร์ตแรกเราต้องค้นหา pid ที่เกี่ยวข้องสำหรับพอร์ตที่กำหนดและฆ่าโดยใช้ pid นั้น

ในกรณีของฉันฉันต้องการรับ pid (id กระบวนการ) ของพอร์ต 3000:

netstat -ltnp | grep -w '3000'

จากนั้นหา pid ที่ฟัง tcp

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

คุณจะได้รับ pid 29972

เพื่อฆ่า pid ใช้คำสั่งด้านล่าง

kill -9 29972

โค้ดหลอกสำหรับกระบวนการฆ่าโดยยึดตามพอร์ต

 netstat -ltnp | grep -w 'PORT'

และ

kill -9 PID


5

ฆ่าพอร์ต:

sudo เป็นสิ่งสำคัญที่จะแสดงรหัสกระบวนการ

$ sudo netstat -antlp | grep 45136
tcp      0      0 0.0.0.0:45136         0.0.0.0:*        LISTEN           **-** 

$ kill -9 45136

5

ใช้คำสั่ง

 netstat -plten |grep java

ใช้ grep java เป็น tomcat ใช้ java เป็นกระบวนการ

มันจะแสดงรายการของกระบวนการที่มีหมายเลขพอร์ตและรหัสกระบวนการ

tcp6       0      0 :::8080                 :::*                    LISTEN      
1000       30070621    16085/java

หมายเลขก่อนหน้า / java เป็น id กระบวนการ ตอนนี้ใช้คำสั่ง kill เพื่อฆ่ากระบวนการ

kill -9 16085

-9 หมายถึงกระบวนการจะถูกฆ่าอย่างรุนแรง



3

ใช้สำหรับกระบวนการฆ่าซึ่งทำงานบนหมายเลขพอร์ต "9001"

 kill $(lsof -t -i:9001)

ซ้ำซ้อนกับตัวอย่างอื่นรวมถึงคำตอบที่ยอมรับได้
Kenster



1

กระบวนการสองขั้นตอนมัน:

  1. รู้รหัสกระบวนการบนพอร์ตหมายเลข 8080 (สามารถใด ๆ )
  2. ฆ่ากระบวนการของ id 8689 นั้น (อาจแตกต่างกัน)

    fuser -n tcp 8080
    
    #o/p 8080/tcp    8689
    
    kill -9 8689
    


1

แสดงการเชื่อมต่อ TCP ที่ใช้งานอยู่พอร์ตที่คอมพิวเตอร์กำลังรับฟัง

netstat -tupln

มันจะแสดงรายการการเชื่อมต่อทั้งหมดของคุณพร้อม pid ค้นหาและคัดลอก pid และเรียกใช้คำสั่งต่อไปนี้ ตรวจสอบให้แน่ใจว่าคุณแทนที่ด้วย id จริงในคำสั่งต่อไปนี้

kill -9 <copied pid>

ใช้เพื่อฆ่าการเชื่อมต่อ -9


1

ลองsudo fuser PORT/tcp -k แทนที่PORTด้วยพอร์ตที่คุณต้องการฆ่าตัวอย่างเช่น80


0

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

สามารถใช้เพื่อฆ่ากระบวนการ คุณสามารถใช้หมายเลขพอร์ตใดก็ได้แทน 9001


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.