উত্তর:
ব্যবহার করুন pkill -f
, যা কমান্ড লাইনের কোনও অংশের সাথে প্যাটার্নটির সাথে মেলে
pkill -f my_pattern
pkill
- সবচেয়ে সাধারণ ভুলটি এই ধারণাটি যে প্রতিটি বাইনারিটির কেবলমাত্র একটি নির্দিষ্ট সময় কোনও সময় উপস্থিত থাকতে পারে being
killall -m my_pattern
।
pgrep
আপনি কী হত্যা করতে যাচ্ছেন তা যাচাই করতে আমি প্রথমে ব্যবহারের পরামর্শ দিই । আপনি pgrep -l
প্রক্রিয়া নাম pgrep -a
দেখতে বা সম্পূর্ণ কমান্ড লাইন দেখতে ব্যবহার করতে পারেন । এটি প্যাকিলের মতো একই পতাকা ব্যবহার করে। সুতরাং এই ক্ষেত্রে আপনি ব্যবহার করতে পারে pgrep -fa my_pattern
।
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
এই কোডটি কি করছে?
ps -ef
কম্পিউটার এই ব্যবহারকারীর কাছে দৃশ্যমান উপর প্রক্রিয়া ID এর একটি তালিকা তৈরি করে। পাইপ গ্রেপ ফিল্টার করে যে নীচে যে স্ট্রিং রয়েছে সারি জন্য। এই grep -v grep
প্রক্রিয়াটি নিজেই গ্রেপিংয়ের সাথে মেলে না বলেছে। পাইপ অ্যাজক প্রিন্ট বলছে ডিফল্ট ডিলিমিটার সাদা স্পেসে সারিগুলিকে বিভক্ত করুন এবং দ্বিতীয় কলামে ফিল্টার করুন যা আমাদের প্রক্রিয়া আইডি। পাইপ xargs সমস্ত পিড এর প্রেরণ, সমস্ত kill -9
শেষ করে একটি নতুন প্রক্রিয়া স্পিন আপ ।
উপরের কোডটি বিভিন্ন কারণে খারাপ, বিপজ্জনক, কুশ্রী এবং হ্যাকিশ।
কোডটি জোর-সমাপ্ত হওয়ার কারণে যদি কোনও সম্ভাব্যতার কম অবস্থার সাথে কোনও ডাটাবেস অপস বা সুরক্ষিত লেনদেন হয়, তবে সময়ের এক শতাংশের কিছু অংশ, লেনদেনের পারমাণবিকতা নষ্ট হয়ে যায়, অপরিবর্তিত আচরণ তৈরি করে। কিল -9 কোন বন্দী নেয় না। যদি আপনার কোডটি এটির প্রতি সংবেদনশীল হয় তবে সেই xargs kill
অংশটি একটি সঞ্চারিত পতাকার সাথে প্রতিস্থাপনের চেষ্টা করুন যা একটি চমত্কার শাটডাউনটির অনুরোধ করে, এবং কেবলমাত্র সেই অনুরোধটি প্রত্যাখ্যান করা হলে, সর্বশেষ-অবলম্বনkill -9
শূন্যের সম্ভাবনা নেই যে আপনি দুর্ঘটনাক্রমে অপারেটিং সিস্টেমটি শেষ করবেন বা কোনও সম্পর্কহীন প্রক্রিয়াতে অপরিজ্ঞাত আচরণের কারণ হয়ে উঠবেন, পুরো সিস্টেমের অস্থিরতার দিকে পরিচালিত করে কারণ ps -ef
উপস্থিত প্রতিটি সম্ভাব্য প্রক্রিয়াটি তালিকাভুক্ত করে, এবং আপনি নিশ্চিত হতে পারবেন না যে কিছু অদ্ভুত তৃতীয় পক্ষের লাইব্রেরি আপনার ভাগ করে দেয় প্রক্রিয়া নাম, বা কিল -9 পড়ার এবং কার্যকর করার মধ্যবর্তী সময়ে, প্রসেসিডটি অন্য কোনও কিছুতে পরিবর্তিত হয়েছিল, এবং এখন আপনি ঘটনাক্রমে কিছু এলোমেলো প্রক্রিয়াটি শেষ করেছেন যা আপনি চাননি।
তবে, যদি আপনি খুব স্বতন্ত্র নাম সহ ঝুঁকিগুলি এবং নিয়ন্ত্রণগুলি বুঝতে পারেন এবং আপনি কিছু বাদ দেওয়া লেনদেন বা ডেটাতে মাঝে মধ্যে দুর্নীতির বিষয়টি ঠিক করেন, তবে সময়ের ৯৯.৯% ভাল থাকবে। যদি কোনও সমস্যা হয়, কম্পিউটারটি পুনরায় বুট করুন, নিশ্চিত করুন যে কোনও প্রক্রিয়া সংঘর্ষ নেই। এটি এই জাতীয় কোডের কারণে যা প্রযুক্তি সমর্থন স্ক্রিপ্ট তৈরি করে: "আপনি কি আপনার কম্পিউটার পুনরায় চালু করার চেষ্টা করেছেন" একটি স্তর 5 মিমি।
ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9
কোনও যুক্তি না দেওয়া থাকলে আপনি xargs কমান্ডটি কার্যকর না করার জন্য ব্যবহার করতে চাইতে পারেন ।
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
উদ্ধৃতি ব্যতীত আমার পটভূমি প্রসেসগুলির মধ্যে কেবল প্রথমটিই মারা গিয়েছিল। এটি আবার চালানো বাকী সবাইকে হত্যা করেছিল।
-r
অপশনটি ওএস এক্সে বিদ্যমান নেই, সুতরাং এটি মনে হয়।
আপনার যদি প্রক্রিয়াগুলি ব্যবহারে আরও নমনীয়তার প্রয়োজন হয়
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
আপনি গ্রেপ-ই ইত্যাদি ব্যবহার করতে পারেন
kill -9 `ps ax | awk '[m]y_pattern { print $1 }'`
(রিফ্যাক্টরিংটিও নোট করুন; @ সিন্থেসাইজারপ্যাটেলের উত্তরে আমার মন্তব্যও দেখুন)।
ps
তিন প্রসেস 123, 234, এবং 345 ফেরৎ, আপনি পারবেন kill 123 234 345
শুধু আপনার মতো rm
বা cat
একাধিক ফাইল আর্গুমেন্ট।
grep
for KILLPID in
পিএস কুঠার | গ্রেপ 'পুমা' | grep -v 'গ্রেপ' | awk '{মুদ্রণ $ 1;;' গ্রেপটি ; do kill -9 $KILLPID; done
সরিয়ে ফেলবে
প্রক্রিয়াটি তালিকাভুক্ত করতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন
ps aux | grep -c myProcessName
আপনার যদি সেই প্রক্রিয়াটির গণনা পরীক্ষা করতে হয় তবে চালান
ps aux | grep -c myProcessName |grep -v grep
যার পরে আপনি ব্যবহার করে প্রক্রিয়াটি মেরে ফেলতে পারেন
kill -9 $(ps aux | grep -e myProcessName | awk '{ print $2 }')
আপনি যদি pkill -f PATTERN
কিছুটা বিপজ্জনক বিচার করেন তবে আমি ইজকিল একটি বাশ স্ক্রিপ্ট লিখেছিলাম যা আপনাকে হত্যা করতে চান এমন প্যাটার্নগুলির সাথে মেলে এমন কোন প্রক্রিয়াগুলি বেছে নেওয়ার অনুরোধ জানায়।
আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন
kill -9 $(ps aux | grep 'process' | grep -v 'grep' | awk '{print $2}')
আপনি যদি প্রক্রিয়া আইডির সন্ধানের মাথাব্যথা নিতে না চান তবে নাম অনুসারে প্রক্রিয়াটি মেরে ফেলার জন্য রিজেক্সপ ব্যবহার করুন। উদাহরণস্বরূপ, ক্রোম নিম্নলিখিত কোডটি মারার কৌশলটি করবে।
killall -r --regexp chrome
-r
বা প্রয়োজন --regexp
, যা যথাক্রমে সংক্ষিপ্ত এবং GNU দীর্ঘ বিকল্প option
আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:
ps -ef | grep -i myprocess | awk {'print $2'} | xargs kill -9
অথবা
ps -aux | grep -i myprocess | awk {'print $2'} | xargs kill -9
এটা আমার জন্য কাজ করে.
খারাপ শোনাচ্ছে?
pkill `pidof myprocess`
উদাহরণ:
# kill all java processes
pkill `pidof java`
এটি সমর্থন করে না এমন সার্ভারের জন্য এটি করার সর্বোত্তম উপায় খুঁজে পেয়েছে pkill
kill -9 $(ps ax | grep My_pattern| fgrep -v grep | awk '{ print $1 }')
আপনাকে লুপ করতে হবে না।
এটি ব্যবহার করার জন্য সবচেয়ে ভাল এবং সবচেয়ে নিরাপদ এর pgrep -f
সঙ্গে kill
, বা শুধু pkill -f
, grep
ing ps
এর আউটপুট ভুল হয়ে যেতে পারে।
প্যাটার্ন ট্রিকস ps | grep
যুক্ত করে | grep -v
বা ব্যবহার করে গ্রেপ লাইনটি ফিল্টার করার দরকার রয়েছে তা ব্যবহারের বিপরীতে , pgrep
কেবল ডিজাইনের মাধ্যমে নিজেকে বেছে নেবে না।
তাছাড়া, আপনার প্যাটার্ন প্রদর্শিত হওয়া উচিত ps
'র UID
/ USER
, SDATE
/ START
বা অন্য কোন কলাম, আপনি আউটপুটে অবাঞ্ছিত প্রসেস পাবেন এবং তাদের হত্যা, pgrep
+ + pkill
এই ত্রুটি ভোগা না।
এছাড়াও আমি খুঁজে পেয়েছি killall -r
/ -regexp
আমার নিয়মিত প্রকাশের সাথে কাজ করে না।
pkill -f "^python3 path/to/my_script$"
আমি ইউজেন রিয়েকের উত্তর নিয়েছি এবং এটি নিয়ে কাজ করেছি। আমার কোডটি নিম্নলিখিতগুলি যুক্ত করে:
ps ax
গ্রেপ অন্তর্ভুক্ত, তাই আমি এটি দিয়ে বাদ দিয়েছি grep -Eiv 'grep'
আমি একটি ফাইল তৈরি করেছি, নাম রেখেছি, এটি killserver
এখানে যায়:
#!/bin/bash
PROCESS_TO_KILL=bin/node
PROCESS_LIST=`ps ax | grep -Ei ${PROCESS_TO_KILL} | grep -Eiv 'grep' | awk ' { print $1;}'`
KILLED=
for KILLPID in $PROCESS_LIST; do
if [ ! -z $KILLPID ];then
kill -9 $KILLPID
echo "Killed PID ${KILLPID}"
KILLED=yes
fi
done
if [ -z $KILLED ];then
echo "Didn't kill anything"
fi
ফলাফল
➜ myapp git:(master) bash killserver
Killed PID 3358
Killed PID 3382
Killed
➜ myapp git:(master) bash killserver
Didn't kill anything
my_pattern
কেবল নামের একটি সাবস্ট্রিং, অথবা এটি কোন Regex বিশেষ অক্ষর রয়েছে?