ইন bash
, আপনি করতে সক্ষম হবেন:
kill $(ps aux | grep '[p]ython csp_build.py' | awk '{print $2}')
এর কাজ সম্পর্কে বিশদ বিবরণ নিম্নরূপ:
ps
আপনি সকল প্রক্রিয়ার তালিকা দেয়।
grep
ফিল্টার আপনার অনুসন্ধানের স্ট্রিং উপর ভিত্তি করে, [p]
একটি কৌতুক আপনি প্রকৃত গোছগাছ বন্ধ করতে grep
প্রক্রিয়া নিজেই।
awk
শুধু আপনার প্রতিটি লাইনে, যা PID, হয় দ্বিতীয় ক্ষেত্র দেয়।
$(x)
কনস্ট্রাক্ট উপায়ে চালানো x
তারপর তার আউটপুট গ্রহণ করা এবং এটা কমান্ড লাইন উপর করা। ps
উপরের কনস্ট্রাক্টের ভিতরে সেই পাইপলাইনের আউটপুট হ'ল প্রক্রিয়া আইডির তালিকা যাতে আপনার মতো একটি কমান্ড আসে kill 1234 1122 7654
।
এখানে এটি প্রতিলিপি কার্যকরভাবে দেখায়:
pax> sleep 3600 &
[1] 2225
pax> sleep 3600 &
[2] 2226
pax> sleep 3600 &
[3] 2227
pax> sleep 3600 &
[4] 2228
pax> sleep 3600 &
[5] 2229
pax> kill $(ps aux | grep '[s]leep' | awk '{print $2}')
[5]+ Terminated sleep 3600
[1] Terminated sleep 3600
[2] Terminated sleep 3600
[3]- Terminated sleep 3600
[4]+ Terminated sleep 3600
এবং আপনি এটি সমস্ত স্লিপারগুলি শেষ করে দেখতে পাচ্ছেন।
grep '[p]ython csp_build.py'
কিছুটা আরও বিশদে বিশদটি ব্যাখ্যা করা :
আপনি যখন sleep 3600 &
অনুসরণ করেন ps -ef | grep sleep
, আপনি এতে দুটি প্রক্রিয়া নিয়েই ঝোঁকেন sleep
, sleep 3600
এবং এবং grep sleep
(কারণ তারা উভয়ই তাদের sleep
মধ্যে রয়েছে, এটি রকেট বিজ্ঞান নয়)।
যাইহোক, এটি ps -ef | grep '[s]leep'
দিয়ে কোনও প্রক্রিয়া তৈরি করবে না sleep
, এটি পরিবর্তে তৈরি করে grep '[s]leep'
এবং এখানে জটিল কৌশলটি রয়েছে: grep
এটি এটি খুঁজে পায় না কারণ এটি নিয়মিত প্রকাশের সন্ধান করে "অক্ষর শ্রেণীর কোনও অক্ষর [s]
(যা s
অনুসরণ করা হয় ) leep
।
অন্য কথায়, এটি সন্ধান করছে sleep
কিন্তু গ্রেপ প্রক্রিয়া grep '[s]leep'
যা এতে নেই sleep
।
যখন আমাকে এটি দেখানো হয়েছিল (এসও তে কেউ এখানে), আমি তাত্ক্ষণিকভাবে এটি ব্যবহার শুরু করেছি কারণ
- এটি যোগ করার চেয়ে কম প্রক্রিয়া
| grep -v grep
; এবং
- এটি মার্জিত এবং স্নিগ্ধ, একটি বিরল সংমিশ্রণ :-)