Lsof -i এর মাধ্যমে পাওয়া যায় এমন একটি পিডকে মেরে ফেলতে কীভাবে একটি স্ক্রিপ্ট লিখতে হয়


29

আমি টমক্যাট ব্যবহার করছি এবং কখনও কখনও যখন আমি এটি বন্ধ করতে বলি তখন প্রক্রিয়াটি সঠিকভাবে হ্রাস হয় না।

আমার এই পথটি খুব করণীয়:

lsof -i tcp:8080

কোন ফলাফল:

COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    888 root   35u  IPv6 780659      0t0  TCP *:http-alt (LISTEN)
java    888 root   39r  IPv6 790103      0t0  TCP localhost:58916->localhost:http-alt (CLOSE_WAIT)
java    888 root   40r  IPv6 792585      0t0  TCP localhost:58936->localhost:http-alt (CLOSE_WAIT)
java    888 root   75r  IPv6 785553      0t0  TCP localhost:58701->localhost:http-alt (CLOSE_WAIT)
java    888 root   77r  IPv6 787642      0t0  TCP localhost:58814->localhost:http-alt (CLOSE_WAIT)
java    888 root  130u  IPv6 783894      0t0  TCP localhost:58686->localhost:http-alt (CLOSE_WAIT)
java    888 root  353u  IPv6 780929      0t0  TCP localhost:58632->localhost:http-alt (CLOSE_WAIT)

আমি তখন দৌড়

kill -9 pid

আমি সমস্ত পিড নম্বর পেতে এবং তাদের হত্যা করার উপায় চাই। কথা হ'ল আমি জানি না কীভাবে সেই ক্ষেত্রটি বিচ্ছিন্ন করা যায়।


1
আপনি যদি নিশ্চিত হন যে আপনার কাছে কেবল একটি tomcatপ্রক্রিয়া খোলা আছে, আপনি ব্যবহার করতে পারেনkillall -9 tomcat
জোসেফ আর।

উত্তর:


57

এখানে একটি -t(সংক্ষিপ্ত) বিকল্প রয়েছে lsof, যা আপনি যেমন খুঁজছেন ঠিক তেমনটি করে বলে মনে হচ্ছে

$ sudo lsof -ti tcp:80
1387
4538
4539

দেখ man lsof

-t       specifies  that  lsof should produce terse output with process
         identifiers only and no header - e.g., so that the output  may
         be piped to kill(1).  -t selects the -w option.

আপনার কাছে প্রয়োজনীয় অনুমতি রয়েছে বলে ধরে নেওয়া, আপনি killকমান্ড প্রতিস্থাপনের সাথে পিআইডিগুলির তালিকা হিসাবে ফলাফলটি পাস করতে পারেন :

kill -9 $(lsof -ti tcp:80)

আমি এখন
বিটিডব্লিউ

3

কিল করার --no-run-if-emptyঅপশনটি ভুলে যাবেন না :)

lsof -ti :8080 | xargs --no-run-if-empty kill -9

এইভাবে কিলটি চালানো হবে সেখানে শোনার প্রক্রিয়া চলছে, নিজেকে খতিয়ে দেখার দরকার নেই।


'--না-রান-ইফ-খালি' বিএসডি (ম্যাক) তে সমর্থিত নয়
দীনেশ ygv

1

lsof -i tcp:8080আউটপুট উত্পাদন করে, তারপরে | egrep -v "COMMAND PID USER"শিরোলেখ রেখাটি ড্রপ করে, তারপর | awk '{print $2}'দ্বিতীয় ক্ষেত্রটি মুদ্রণ করে, এর | sort -nজন্য সংখ্যা প্রস্তুত করে | uniq, যা প্রতিটি অনন্য পিআইডি একবারে আউটপুট করে। সব একসাথে রাখার ফলে:

 lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq  

তবে, pkill -KILL tomcatবা killall -KILL tomcatআরও সহজ।


টমক্যাট প্রক্রিয়াটির নাম "টমক্যাট" রাখা হয়নি যা সমস্যা। এটি কেবল একটি সাধারণ জাভা প্রক্রিয়া, একই সাথে অন্যান্য জাভা প্রক্রিয়াগুলি চলমান থাকলে সঠিক প্রক্রিয়া সনাক্তকরণের জন্য অতিরিক্ত কাজ করতে হবে।
টেরি ওয়াং

@ টেরি ওয়াং ইয়ুপ, আমারও সমস্যা ছিল। স্টিলড্রাইভারের উত্তর দুর্দান্ত কাজ করছে।
ব্যবহারকারী2757729

0

@ ওয়াল্টিনেটরের এক লাইনার দুর্দান্ত।

আমি এতে আরও কিছু গন্ধ যুক্ত করব:

lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq | xargs kill -9

অথবা

kill -9 $(lsof -i tcp:8080 | egrep -v "COMMAND PID USER" | awk '{print $2}' | sort -n | uniq)

দ্রষ্টব্য: এটি এখনও খুব বেসিক, বাস্তব পরিবেশে এটি আরও দৃ make়তর করতে আপনার আরও লবণ এবং মরিচ যোগ করতে হতে পারে।


0

এই স্ক্রিপ্টটি আমি কিছুটা ত্রুটি পরীক্ষা করে সামনে এলাম।

#!/bin/bash

PORT=$1

if ! [[ "$PORT" =~ ^[0-9]+$ ]] ;
then
  printf "error: '$PORT' is not a number.\n\nUsage killport <port number>\n"
  exit 1
fi

PID=$(lsof -ti:$PORT)

if ! [[ "$PID" =~ ^[0-9]+$ ]] ;
then
  printf "no proccess found, nothing to kill.\n"
  exit 0
fi

printf "killing process $PID running on $PORT\n"
kill -9 $PID

0

এখানে একটি ফিশ শেল ফাংশন রয়েছে

function kill-port
  set pids (lsof -ti tcp:$argv)
  if test $pids
    kill -9 $pids
  else
    echo "No proccesses on that port to kill to see for your self -- lsof -i tcp:$argv"
  end
end

এই স্থানে একটি ফাইলের মধ্যে এই চুষারকে কেবল আটকে দিন ~/.config/fish/functions/kill-port.fishএবং আপনার ভাল লাগবে। আপনি এটি পছন্দ করতে পারেনkill-port 8000

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.