একটি নির্দিষ্ট বন্দরে চলমান যে কোনও পরিষেবা হত্যা করুন


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)

আমার কি জাভা দিয়ে টিসিপি প্রতিস্থাপন করতে হবে?
অভিষেক ডট পাই

@ অভিষেকডটপি: না, ব্যবহার করুন tcp
cuonglm

এই -tপতাকাটির জন্য আপনাকে ধন্যবাদ , এত দিন আমার এটি দরকার ছিল।
জ্যাকসন

আপনি কীভাবে শেষ পংক্তিতে সঠিকভাবে পাস করবেন তার ইঙ্গিত দিতে পারেন?
ভ্লাদিমির প্রটসেনকো

@ ভ্লাদিমিরপ্রোটেনকো আপনি কি আরও প্রসঙ্গ সরবরাহ করতে পারেন?
cuonglm

4

আপনি যদি 8080 বন্দর নম্বর দিয়ে চলমান কোনও পরিষেবা বা প্রক্রিয়া মারতে চান তবে প্রথমে আপনাকে 8080 বন্দর প্রক্রিয়া সনাক্তকরণ নম্বর (পিআইডি) খুঁজে বের করতে হবে এবং তারপরে এটি হত্যা করতে হবে kill 8080 পোর্ট নম্বর পিআইডি খুঁজতে নিম্নলিখিত কমান্ডটি চালান:

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. একটি পিএইচপি ফাইল তৈরি করুন kill.php
  2. প্রয়োজনীয় পোর্ট সহ পিএইচপি ফাইল চালান $ php kill.php 8088

1
ব্যবহার kill -9লক্ষ্য প্রক্রিয়াটি পরিষ্কার করার সুযোগ দেয় না। killকমপক্ষে শুরুতে, সরল ব্যবহার বিবেচনা করুন ।
রোয়াইমা

এই কাজের জন্য পিএইচপি ব্যবহারের জন্য +1।
বনাঙ্গুইন

@ জি-ম্যান ভুলক্রমে এটি যুক্ত করেছে
নিবাস

Jenkins সঙ্গে এই যখন নির্বাহ গুচ্ছ প্রক্রিয়া ব্যবহার করে প্রদত্ত পোর্ট টা সঠিক প্রক্রিয়া ID হত্যা করতে @Bananguin
nivas

যখন স্ক্রিপ্ট ফাইল চলমান এবং তার ধারণ lsof -t -i:port_idকমান্ড যখন বিল্ড প্রক্রিয়া port_idবা process idএর port_idফাঁকা হতে পারে, সেই সময় আমরা কিছু কমান্ড ভুল পান, ত্রুটি টা যে ধরনের এড়াতে এই ব্যবহার করা হয়েছে। এখানে আমি প্রদত্ত বন্দরটির সঠিক প্রক্রিয়া আইডিটি মেরে ফেলতে পারি
6:52 এ নিবাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.