ধরুন আমার কাছে কোনও প্রক্রিয়া (উদাহরণস্বরূপ vi
) চলার এক হাজার বা তারও বেশি উদাহরণ রয়েছে । আমি কীভাবে একটি একক শট / এক লাইন কমান্ড / এক কমান্ডে তাদের সমস্তকে হত্যা করব?
ধরুন আমার কাছে কোনও প্রক্রিয়া (উদাহরণস্বরূপ vi
) চলার এক হাজার বা তারও বেশি উদাহরণ রয়েছে । আমি কীভাবে একটি একক শট / এক লাইন কমান্ড / এক কমান্ডে তাদের সমস্তকে হত্যা করব?
উত্তর:
ভাল পুরানো কি হয়েছে,
for pid in $(ps -ef | grep "some search" | awk '{print $2}'); do kill -9 $pid; done
এটিকে আরও দক্ষ করার উপায় রয়েছে,
for pid in $(ps -ef | awk '/some search/ {print $2}'); do kill -9 $pid; done
এবং অন্যান্য বৈচিত্রগুলি, তবে প্রাথমিক স্তরে, এটি সর্বদা আমার পক্ষে কাজ করে।
echo kill -9 $pid
প্রথম হিসাবে চালিত করি তাই আমি জানি যে আমি কী পাচ্ছি। আমি নিশ্চিত নই যে এআইএক্স আছে pkill
, যা আমার রুটি এবং মাখন ইউএনআইএক্স। এবং নিচে ভোট দেওয়া - বিজোড় হওয়া কি আসলেই খারাপ।
csh
কিল্ল ব্যবহার করুন,
killall vi
এটি 'vi' নামের সমস্ত আদেশকে হত্যা করবে
আপনি সিগন্যালও যুক্ত করতে পারেন, উদাহরণস্বরূপ SIGKILL
killall -9 vi
killall -9 vi
killall
নামটি যা ঠিক বলে দেয় ঠিক তেমন করে ... এটি আর-ইন-প্রক্রিয়াটিকে মেরে ফেলে।
pkill
আমি প্রস্তাবিত যা তা উপলব্ধ থাকে ( লিনাক্স , ফ্রিবিএসডি , নেটবিএসডি , ওপেনবিএসডি , সোলারিস )। সম্পূর্ণ কমান্ড লাইন বা অন্যান্য মানদণ্ডের মাধ্যমে আপনি কমান্ড নাম দ্বারা প্রক্রিয়াগুলি নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, pkill vi
সমস্ত প্রোগ্রামকে হত্যা করে যার কমান্ড নামটিতে স্ট্রিং থাকে vi
। কেবলমাত্র প্রসেসগুলি হত্যা করতে vi
, ব্যবহার করুন pkill -x vi
। vi
শেষ হওয়া যুক্তি দিয়ে শেষ হওয়া প্রসেসগুলি কেবলমাত্র হত্যা করতে .conf
ব্যবহার করুন pkill -fx 'vi.*\.conf'
।
পিআইডিগুলির তালিকা দেখতে যা pkill
আপনাকে সিগন্যাল প্রেরণ করবে, ব্যবহার করবে pgrep
, যার সিগন্যাল নাম বা নম্বর গ্রহণ করবে না তা বাদে ঠিক একই সিনট্যাক্স রয়েছে। এই প্রক্রিয়াগুলি সম্পর্কে আরও তথ্য দেখতে, চালান
ps -p "$(pgrep …)"
লিনাক্সের অধীনে, ps -p $(pgrep -d, …)
এর পরিবর্তে আপনার প্রয়োজন (এটি একটি বাগ: লিনাক্স ps
পসিক্স-অনুগত নয়)।
প্রসেসগুলি হত্যা করার শনাক্ত করার আরেকটি সাধারণ উপায় হ'ল প্রক্রিয়াগুলির একটি নির্দিষ্ট ফাইল খোলা থাকে (যা প্রক্রিয়াটির কার্যকর হতে পারে)। আপনি এগুলি তালিকাভুক্ত করতে পারেন fuser
; fuser -k
তাদের একটি সংকেত প্রেরণ ব্যবহার করুন। উদাহরণস্বরূপ, fuser -k /usr/bin/find
চলমান সমস্ত চলমান ইভেন্টগুলিকে হত্যা করে find
।
যদি কোনও পালিয়ে যাওয়ার প্রক্রিয়া থাকে যা কাঁপতে থাকে তবে আপনার পুরো প্রক্রিয়া গোষ্ঠীটি একবারে মেরে ফেলার প্রয়োজন হতে পারে । একটি প্রক্রিয়া গ্রুপটি তার নেতার নেতিবাচক দ্বারা চিহ্নিত করা হয়, যা গ্রুপের সমস্ত প্রক্রিয়াগুলির পূর্বপুরুষ প্রক্রিয়া। প্রক্রিয়া গ্রুপটি যে প্রক্রিয়াটির অন্তর্ভুক্ত তা দেখতে, চালান ps -o pgid
(প্লাস কোন প্রসেসটি নির্বাচন করার জন্য কোনও বিকল্প (এস) প্রদর্শিত হবে)। আপনি যদি নির্ধারণ করেন যে আপনি প্রক্রিয়া গ্রুপের লিডার 1234 এবং তার সমস্ত শিশুদের হত্যা করতে চান, চালান kill -1234
বা kill -HUP -1234
অন্য কোনও সংকেত।
আপনি যদি আরও ভাল কোনও উপায় খুঁজে না পান তবে ps
সমস্ত প্রক্রিয়াগুলি তালিকাভুক্ত করতে এবং এটির সাথে grep
বা অন্য কোনও পাঠ্য ফিল্টারিং কমান্ডের সাথে ফিল্টার করার জন্য উপযুক্ত বিকল্পগুলি ব্যবহার করুন । অনুরূপ নামের সাথে কোনও কমান্ড চালাচ্ছে বা সেই নামটি যুক্ত যুক্তি সহ দুর্ঘটনাক্রমে অন্য প্রক্রিয়াগুলির সাথে মেলে না সেদিকে খেয়াল রাখুন। উদাহরণ স্বরূপ:
kill $(ps -o pid -o comm | awk '$2 == "vi" {print $1}')
মনে রাখবেন যে আপনার grep
বা awk
কমান্ড নিজেই ps
আউটপুটে তালিকাভুক্ত হতে পারে ( ps
এবং ফিল্টারিং কমান্ডটি সমান্তরালভাবে শুরু হয়েছিল, সুতরাং এটি প্রদর্শিত হবে কিনা তা সময় নির্ধারণের উপর নির্ভর করবে না)। কমান্ড আর্গুমেন্টগুলি ps
আউটপুটে অন্তর্ভুক্ত করা থাকলে এটি বিশেষত গুরুত্বপূর্ণ ।
pkill
এখানে খুব সুন্দর। প্যাটার্নটি পরিমার্জন করতে আপনি প্রচুর পরিমাণে প্যারামিটার দিতে পারেন।
pkill
লিনাক্স, বিএসডি এবং সোলারিসে উপলব্ধ - আফাইক। সুতরাং এটির চেয়ে আরও বড় ছড়িয়ে পড়েছে killall
।
সবচেয়ে সহজ উপায় হ'ল প্রথমে আপনি সঠিক প্রক্রিয়া আইডি পেয়ে যাচ্ছেন তা যাচাই করে নিন:
pgrep -f [part_of_a_command]
ফলাফল আশানুরূপ হলে। সঙ্গে যেতে:
pkill -f [part_of_a_command]
pgrep -f "command name"
আকর্ষণীয় কেউ এটির উল্লেখ করেনি। পিডোফ উত্তীর্ণ প্রক্রিয়া নামের সাথে মিলে যায় এমন প্রক্রিয়াগুলির স্পেস-বিভাজিত পিডগুলি আউটপুট দেয়। যেমন, আপনি kill
পাইপ ছাড়াই সরাসরি এর আউটপুট ব্যবহার করতে পারেন । আর্চ লিনাক্সে আমি ব্যবহার করি
kill -9 $(pidof <proc name>)
এই সমাধানের ক্ষতিটি হ'ল এটি নিয়মিত অভিব্যক্তি ব্যবহারের অনুমতি দেয় না।
আমি আপনাকে চেষ্টা করার পরামর্শ দেব pkill
।
উদা: ps -ef | pkill -f command
হত্যার জন্য সমস্ত প্রক্রিয়াটির তালিকা দেখানোর জন্য প্রথমে চেষ্টা করুন pgrep
:
উদা: ps -ef | pgrep -f command
ps -ef
মধ্যে pkill
বা pgrep
? এই কমান্ডগুলি স্ট্যান্ডার্ড ইনপুট থেকে পঠিত হয় না।
$ ps -eaf | grep "xyz" | grep -v grep | awk 'print $2' | xargs kill
pkill
থেকে ব্যবহার করিprocps
।