Giết bất kỳ dịch vụ nào đang chạy ở một cổng cụ thể


13

Tôi đang cố gắng viết một kịch bản giết chết dịch vụ đang chạy ở một cổng cụ thể. Đây là kịch bản của tôi:

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

Đây là một chương trình java. Kịch bản này đôi khi hoạt động, nhưng thất bại bí ẩn hầu hết thời gian.

Có cách nào khác để giết một dịch vụ đang chạy trên một cổng không? Cổng của tôi là 4990.


Kịch bản của bạn cũng sẽ giết các tiến trình Java chạy trên các vật nuôi khác, chẳng hạn như 14990.
roaima

Câu trả lời:


32

Bạn có thể thử fuser:

fuser -k 4990/tcp

Hoặc sử dụng lsofđể lấy id tiến trình, sau đó cung cấp cho kill:

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

Tôi có nên thay thế tcp bằng java không?
Abhishek chấm py

@Abhishekdotpy: Không, sử dụng tcp.
cuonglm

Cảm ơn bạn vì -tlá cờ đó , tôi đã cần nó rất lâu.
Jackson

Bạn có thể cho một gợi ý về cách vượt qua dòng cuối cùng cho ssh?
Vladimir Protsenko

@VladimirProtsenko bạn có thể cung cấp thêm ngữ cảnh không?
cuonglm

4

Nếu bạn muốn giết bất kỳ dịch vụ hoặc quy trình nào đang chạy trên cổng số 8080 thì trước tiên bạn cần tìm số nhận dạng quy trình cổng 8080 (PID) và sau đó hủy nó. Chạy lệnh sau để tìm số cổng 8080 số PID:

sudo lsof -t -i:8080

Đây,

  • sudo - lệnh để yêu cầu đặc quyền quản trị viên (id người dùng và mật khẩu).
  • lsof - danh sách các tệp (Cũng được sử dụng để liệt kê các quy trình liên quan)
  • -t - chỉ hiển thị ID tiến trình
  • -i - chỉ hiển thị quá trình kết nối internet
  • : 8080 - chỉ hiển thị các quy trình trong số cổng này

Vì vậy, bây giờ bạn có thể dễ dàng tiêu diệt PID của mình bằng lệnh sau:

sudo kill -9 <PID>

Đây,

  • giết - lệnh để giết quá trình
  • -9 - mạnh mẽ

Bạn có thể sử dụng một lệnh để giết một tiến trình trên một cổng cụ thể bằng lệnh sau:

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

Để biết thêm bạn có thể xem liên kết sau Cách giết một quá trình trên một cổng cụ thể trên linux


Sử dụng kill -9cho quá trình mục tiêu không có cơ hội để dọn dẹp. Xem xét sử dụng đồng bằng kill, ít nhất là ban đầu.
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. tạo một tập tin php kill.php
  2. chạy tệp php với cổng yêu cầu $ php kill.php 8088

1
Sử dụng kill -9cho quá trình mục tiêu không có cơ hội để dọn dẹp. Xem xét sử dụng đồng bằng kill, ít nhất là ban đầu.
roaima

+1 để sử dụng PHP cho nhiệm vụ này.
Bananguin

@ G-Man do nhầm lẫn đã thêm
nivas

@Bananguin để giết id quy trình chính xác của cổng đã cho bằng cách sử dụng điều này khi thực hiện quy trình bó với
jenkins

khi chạy file kịch bản và nó chứa lsof -t -i:port_idlệnh khi quá trình xây dựng các port_idhoặc process idcủa port_idcó thể rỗng, thời điểm đó chúng tôi nhận được một số lỗi lệnh, để tránh điều đó loại lỗi am sử dụng này. ở đây tôi có thể giết id tiến trình chính xác của cổng đã cho
nivas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.