আমি আপনাকে বাস্তব জীবনের দৃশ্যের ভিত্তিতে কিছুটা জটিল উদাহরণ দিয়ে যেতে যাচ্ছি।
সমস্যা
আসুন আমরা কমান্ডটি conky
আমার ডেস্কটপে প্রতিক্রিয়া বন্ধ করে দিয়েছিল এবং আমি নিজে এটি হত্যা করতে চাই। আমি কিছুটা ইউনিক্স জানি, তাই আমি জানি যে আমার যা করা দরকার তা হ'ল কমান্ডটি কার্যকর করা kill <PID>
। পিআইডি পুনরুদ্ধার করতে, আমি আমার ইউনিক্স বিতরণ আমাকে যে কোনও সরঞ্জাম ব্যবহার করতে পারি ps
বা ব্যবহার করতে top
পারি। তবে আমি কীভাবে এক আদেশে এটি করতে পারি?
উত্তর
$ ps aux | grep conky | grep -v grep | awk '{print $2}' | xargs kill
অস্বীকৃতি: এই আদেশটি কেবলমাত্র নির্দিষ্ট ক্ষেত্রে কাজ করে। এটি আপনার টার্মিনালে অনুলিপি / আটকান এবং এটি ব্যবহার শুরু করবেন না, এটি নিঃসন্দেহে প্রক্রিয়াগুলি হত্যা করতে পারে। বরং এটি কীভাবে তৈরি করা যায় তা শিখুন ।
কিভাবে এটা কাজ করে
1- ps aux
এই কমান্ডটি চলমান প্রক্রিয়াগুলির তালিকা এবং সেগুলি সম্পর্কে কিছু তথ্য আউটপুট দেবে। আকর্ষণীয় তথ্য হ'ল এটি প্রতিটি প্রক্রিয়ার পিআইডিকে এর দ্বিতীয় কলামে আউটপুট দেবে। আমার বাক্সে কমান্ডের আউটপুট থেকে এখানে একটি নির্যাস দেওয়া হয়েছে:
$ ps aux
rahmu 1925 0.0 0.1 129328 6112 ? S 11:55 0:06 tint2
rahmu 1931 0.0 0.3 154992 12108 ? S 11:55 0:00 volumeicon
rahmu 1933 0.1 0.2 134716 9460 ? S 11:55 0:24 parcellite
rahmu 1940 0.0 0.0 30416 3008 ? S 11:55 0:10 xcompmgr -cC -t-5 -l-5 -r4.2 -o.55 -D6
rahmu 1941 0.0 0.2 160336 8928 ? Ss 11:55 0:00 xfce4-power-manager
rahmu 1943 0.0 0.0 32792 1964 ? S 11:55 0:00 /usr/lib/xfconf/xfconfd
rahmu 1945 0.0 0.0 17584 1292 ? S 11:55 0:00 /usr/lib/gamin/gam_server
rahmu 1946 0.0 0.5 203016 19552 ? S 11:55 0:00 python /usr/bin/system-config-printer-applet
rahmu 1947 0.0 0.3 171840 12872 ? S 11:55 0:00 nm-applet --sm-disable
rahmu 1948 0.2 0.0 276000 3564 ? Sl 11:55 0:38 conky -q
2- grep conky
আমি কেবল একটি প্রক্রিয়াতে আগ্রহী, তাই আমি grep
আমার প্রোগ্রামের সাথে সম্পর্কিত এন্ট্রি সন্ধান করতে ব্যবহার করি conky
।
$ ps aux | grep conky
rahmu 1948 0.2 0.0 276000 3564 ? Sl 11:55 0:39 conky -q
rahmu 3233 0.0 0.0 7592 840 pts/1 S+ 16:55 0:00 grep conky
3- grep -v grep
আপনি দ্বিতীয় ধাপে দেখতে পাচ্ছেন, কমান্ডটি তার তালিকায় প্রক্রিয়াটিকে ps
আউটপুট করে grep conky
দেয় (এটি সর্বোপরি একটি চলমান প্রক্রিয়া)। এটি ফিল্টার করার জন্য, আমি চালাতে পারি grep -v grep
। বিকল্প -v
বলে grep
সব লাইন মেলে ব্যতীত প্যাটার্ন ধারণকারী বেশী।
$ ps aux | grep conky | grep -v grep
rahmu 1948 0.2 0.0 276000 3564 ? Sl 11:55 0:39 conky -q
এনবি: আমি একক grep
কলে 2 এবং 3 পদক্ষেপের উপায় জানতে পছন্দ করব ।
4- awk '{print $2}'
এখন আমি আমার লক্ষ্য প্রক্রিয়াটি বিচ্ছিন্ন করেছি। আমি এর পিআইডি পুনরুদ্ধার করতে চাই। অন্য কথায় আমি আউটপুট এর দ্বিতীয় শব্দটি পুনরুদ্ধার করতে চাই। আমার জন্য ভাগ্যবান, বেশিরভাগ (সমস্ত?) আধুনিক ইউনিসগুলি awk
একটি স্ক্রিপ্টিং ভাষার কিছু সংস্করণ সরবরাহ করবে যা টেবুলার ডেটা দিয়ে বিস্মিত করে। আমাদের কাজ যেমন সহজ হয় print $2
।
$ ps aux | grep conky | grep -v grep | awk '{print $2}'
1948
5- xargs kill
আমার পিআইডি আছে All I Need থেকে এটি পাস হয় kill
। এটি করতে, আমি ব্যবহার করব xargs
।
xargs kill
ইনপুট থেকে পড়তে হবে (নল থেকে আমাদের ক্ষেত্রে), একটি ফর্ম কমান্ড গঠিত kill <items>
( <items>
যাই হোক না কেন এটা ইনপুট থেকে পড়া হয়), এবং তারপর নির্মিত কমান্ডটি প্রয়োগ করুন। আমাদের ক্ষেত্রে এটি কার্যকর করা হবে kill 1948
। কার্যোদ্ধার.
চূড়ান্ত শব্দ
নোট করুন যে আপনি ইউনিক্সের কোন সংস্করণ ব্যবহার করছেন তার উপর নির্ভর করে কিছু প্রোগ্রাম কিছুটা আলাদাভাবে আচরণ করতে পারে (উদাহরণস্বরূপ, ps
কলাম $ 3 এ পিআইডি আউটপুট দিতে পারে)। যদি কিছু ভুল বা অন্যরকম মনে হয় তবে আপনার বিক্রেতার ডকুমেন্টেশন (বা আরও ভাল, man
পৃষ্ঠাগুলি) পড়ুন। লম্বা পাইপগুলি বিপজ্জনক হতে পারে সেদিকেও সতর্ক থাকুন। বিশেষ করে যখন মত কমান্ড ব্যবহার করে যে কোনও অনুমানের করা না kill
বা rm
। উদাহরণস্বরূপ, যদি 'কনকি' (বা 'একনকিয়াস') নামে অন্য কোনও ব্যবহারকারী থাকত তবে আমার কমান্ড তার চলমান সমস্ত প্রক্রিয়াও মেরে ফেলতে পারে!
আমি যা বলছি তা সাবধান, বিশেষত দীর্ঘ পাইপগুলির জন্য। অনুমান করা এবং পরে দুঃখ অনুভব করার চেয়ে আমাদের এখানে যেমন হয়েছে তেমন ইন্টারেক্টিভভাবে এটি তৈরি করা ভাল।