एक विशिष्ट बंदरगाह पर चल रही किसी भी सेवा को मार डालो


13

मैं एक स्क्रिप्ट लिखने की कोशिश कर रहा हूं जो एक विशिष्ट पोर्ट पर चलने वाली सेवा को मारता है। यह मेरी स्क्रिप्ट है:

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

यह एक जावा कार्यक्रम है। यह स्क्रिप्ट कभी-कभी काम करती है, लेकिन ज्यादातर समय रहस्यमय तरीके से विफल हो जाती है।

क्या पोर्ट पर चलने वाली सेवा को मारने का कोई अन्य तरीका है? मेरे बंदरगाह है 4990


आपकी स्क्रिप्ट भी इस तरह के 14990. के रूप में अन्य पालतू जानवरों पर चल रहे जावा प्रक्रियाओं को मार डालेंगे
roaima

जवाबों:


32

आप कोशिश कर सकते हैं fuser:

fuser -k 4990/tcp

या lsofप्रक्रिया आईडी प्राप्त करने के लिए उपयोग कर रहे हैं, तो इसे फ़ीड करें kill:

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

क्या मुझे जावा के साथ टीसीपी को बदलना चाहिए?
अभिषेक डॉट पीयू

@Abhishekdotpy: नहीं, उपयोग करें tcp
कोउंगलम

उस -tझंडे के लिए धन्यवाद , मुझे इतने लंबे समय तक इसकी जरूरत थी।
जैक्सन

तुम कैसे ठीक से ssh करने के लिए अंतिम पंक्ति पारित करने के लिए पर एक संकेत दे सकता है?
व्लादिमीर प्रोत्सेंको

@ व्लादिमीरप्रोटेंको आप अधिक संदर्भ प्रदान कर सकते हैं?
cuonglm

4

अगर आप पोर्ट नंबर 8080 पर चल रही किसी सेवा या प्रक्रिया को मारना चाहते हैं तो सबसे पहले आपको 8080 पोर्ट प्रोसेस आइडेंटिफिकेशन नंबर (PID) को ढूंढना होगा और फिर उसे मारना होगा। 8080 पोर्ट नंबर PID खोजने के लिए निम्न कमांड चलाएँ:

sudo lsof -t -i:8080

यहाँ,

  • sudo - कमांड विशेषाधिकार (उपयोगकर्ता आईडी और पासवर्ड) पूछने के लिए आदेश।
  • lsof - फाइलों की सूची (संबंधित प्रक्रियाओं की सूची के लिए भी प्रयोग की जाती है)
  • -t - केवल प्रक्रिया आईडी दिखाएं
  • -i - केवल इंटरनेट कनेक्शन संबंधित प्रक्रिया दिखाएं
  • : 8080 - इस पोर्ट संख्या में केवल प्रक्रियाएं दिखाएं

तो अब आप आसानी से निम्नलिखित आदेश का उपयोग करके अपने पीआईडी ​​को मार सकते हैं:

sudo kill -9 <PID>

यहाँ,

  • मार - प्रक्रिया को मारने के लिए आदेश
  • -9 - जबरदस्ती

आप निम्न कमांड का उपयोग करके किसी विशिष्ट पोर्ट पर एक प्रक्रिया को मारने के लिए एक कमांड का उपयोग कर सकते हैं:

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

अधिक के लिए आप निम्न लिंक देख सकते हैं कि लिनक्स पर किसी विशिष्ट पोर्ट पर किसी प्रक्रिया को कैसे मारना है


उपयोग kill -9करने से लक्ष्य प्रक्रिया को सुव्यवस्थित करने का कोई अवसर नहीं मिलता है। killकम से कम शुरुआत में, सादे का उपयोग करने पर विचार करें ।
रोइमा

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कम से कम शुरुआत में, सादे का उपयोग करने पर विचार करें ।
रोइमा

इस कार्य के लिए PHP का उपयोग करने के लिए +1।
बनगुंगिन

@ जी-मैन ने गलती से यह जोड़ दिया
nivas

@ बानुआंगिन दिए गए पोर्ट की सटीक प्रक्रिया आईडी को मारने के लिए उपयोग कर रहा है जब
जेनकींस के

जब स्क्रिप्ट फ़ाइलें चल रहा है और इसके शामिल lsof -t -i:port_idआदेश जब निर्माण प्रक्रिया port_idया process idकी port_idखाली हो सकता है, उस समय हम कुछ आदेश त्रुटि मिलती है, त्रुटि बजे उस तरह से बचने के लिए इस का इस्तेमाल किया। यहाँ मैं दिए गए पोर्ट की सटीक प्रक्रिया आईडी को मार सकता हूँ
निवाज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.