ฆ่าบริการใด ๆ ที่ทำงานอยู่ที่พอร์ตเฉพาะ


13

ฉันพยายามเขียนสคริปต์ที่ฆ่าบริการที่ทำงานที่พอร์ตเฉพาะ นี่คือสคริปต์ของฉัน:

a=$(ps ax | grep 4990 | grep java | awk '{print $1}')
kill -9 $a

มันเป็นโปรแกรมจาวา สคริปต์นี้ใช้งานได้บางครั้ง แต่ล้มเหลวอย่างลึกลับส่วนใหญ่

มีวิธีอื่นในการฆ่าบริการที่ทำงานบนพอร์ตหรือไม่? 4990พอร์ตของฉันคือ


สคริปต์ของคุณจะฆ่ากระบวนการ Java ที่ทำงานกับสัตว์เลี้ยงอื่น ๆ เช่น 14990
roaima

คำตอบ:


32

คุณสามารถลองfuser:

fuser -k 4990/tcp

หรือใช้lsofเพื่อรับรหัสกระบวนการจากนั้นป้อนไปที่kill:

kill $(sudo lsof -t -i:4990)

ฉันต้องแทนที่ tcp ด้วย java หรือไม่
Abhishek dot py

@Abhishekdotpy: tcpไม่มีการใช้งาน
cuonglm

ขอบคุณสำหรับ-tธงนั้นฉันต้องการมันมานานแล้ว
แจ็คสัน

คุณสามารถให้คำแนะนำเกี่ยวกับวิธีการส่งผ่านบรรทัดสุดท้ายไปยัง ssh ได้อย่างถูกต้อง?
Vladimir Protsenko

@VladimirProtsenko คุณสามารถให้บริบทเพิ่มเติมได้หรือไม่
cuonglm

4

ถ้าคุณต้องการที่จะฆ่าบริการหรือกระบวนการใด ๆ ที่ทำงานบนหมายเลขพอร์ต 8080 ก่อนอื่นคุณต้องค้นหาหมายเลขประจำตัวของกระบวนการพอร์ต 8080 (PID) แล้วฆ่ามัน รันคำสั่งต่อไปนี้เพื่อค้นหาหมายเลขพอร์ต 8080 PID:

sudo lsof -t -i:8080

ที่นี่

  • sudo - คำสั่งถามสิทธิ์ผู้ดูแลระบบ (ID ผู้ใช้และรหัสผ่าน)
  • lsof - รายชื่อของไฟล์ (นอกจากนี้ยังใช้สำหรับรายการกระบวนการที่เกี่ยวข้อง)
  • -t - แสดง ID กระบวนการเท่านั้น
  • -i - แสดงกระบวนการเชื่อมต่ออินเทอร์เน็ตที่เกี่ยวข้องเท่านั้น
  • : 8080 - แสดงเฉพาะกระบวนการในหมายเลขพอร์ตนี้

ดังนั้นตอนนี้คุณสามารถฆ่า PID ของคุณได้อย่างง่ายดายโดยใช้คำสั่งต่อไปนี้:

sudo kill -9 <PID>

ที่นี่

  • kill - คำสั่งเพื่อฆ่ากระบวนการ
  • -9 - แรง

คุณสามารถใช้หนึ่งคำสั่งเพื่อฆ่ากระบวนการบนพอร์ตเฉพาะโดยใช้คำสั่งต่อไปนี้:

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

สำหรับข้อมูลเพิ่มเติมคุณสามารถดูลิงค์ต่อไปนี้ วิธีฆ่ากระบวนการในพอร์ตเฉพาะบน linux


การใช้kill -9ช่วยให้กระบวนการเป้าหมายไม่มีโอกาสที่จะเป็นระเบียบ พิจารณาใช้ธรรมดาkillอย่างน้อยในตอนแรก
roaima

1
<?php
  $port = $argv[1]; 
  if(!empty($port) && is_numeric($port) ){
  $pid = trim(shell_exec("lsof -t -i:".$port));
  if(!empty($pid)){
     shell_exec("sudo kill -9 ".$pid);
     echo "pid : ".$pid."  killed which is listened port : ".$port."\xA";
  }
  else{
     echo " [X] no such process found for pid : ".$port."\xA";
  }
  }
  else{ 
     echo " invalid pid \xA";
  }
?>
  1. สร้างไฟล์ php kill.php
  2. เรียกใช้ไฟล์ php ด้วยพอร์ตที่จำเป็น $ php kill.php 8088

1
การใช้kill -9ช่วยให้กระบวนการเป้าหมายไม่มีโอกาสที่จะเป็นระเบียบ พิจารณาใช้ธรรมดาkillอย่างน้อยในตอนแรก
roaima

+1 สำหรับการใช้ PHP สำหรับงานนี้
Bananguin

@ G-Man โดยไม่ได้ตั้งใจเพิ่ม
nivas

@Bananguin เพื่อฆ่า id กระบวนการที่แน่นอนของพอร์ตที่กำหนดให้ใช้สิ่งนี้เมื่อดำเนินการประมวลผลกลุ่มกับเจนกินส์
30919

เมื่อเรียกใช้แฟ้มสคริปต์และมีlsof -t -i:port_idคำสั่งเมื่อสร้างกระบวนการport_idหรือprocess idของport_idอาจจะว่างเปล่าเวลาที่เราได้รับข้อผิดพลาดคำสั่งบางอย่างเพื่อหลีกเลี่ยงชนิดของข้อผิดพลาดนที่ใช้วิธีนี้ ที่นี่ฉันสามารถฆ่ารหัสกระบวนการที่แน่นอนของพอร์ตที่กำหนด
4252
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.