সিগন্যাল

একটি নির্দিষ্ট প্রসেসকে বিশেষ কিছু করতে বলার পদ্ধতি হচ্ছে সিগন্যাল। তা হতে পারে আমরা তাকে বন্ধ হতে বা পজ করতে বলছি। আবার চালু হতে বলছি আরেকটি সিগন্যাল দিয়ে। প্রসেসকে সিগন্যাল পাঠাতে আমরা যে কমান্ডটি ব্যবহার করি সেটি হচ্ছে kill। এই কমান্ডের কমান্ডকাঠামো এরকম:

kill [-signal] PID_or_Job-ID...

অর্থাৎ প্রথমে কমান্ডটি তারপর যে সিগন্যালটি পাঠাতে চাই সেটি(নাম্বার বা নাম দিয়ে প্রকাশ করা) '-' চিহ্নসহ তারপর যে যে প্রসেসকে সিগন্যালটি দিতে চাই তাদের PID বা Job ID। কোনো সিগন্যালের নাম দেয়া না হলে ডিফল্টভাবে TERM সিগন্যালটি পাঠানো হয়।

আসুন, সচরাচর ব্যবহৃত সিগন্যালগুলো দেখি:

kill -l কমান্ড দিয়ে আপনি চাইলে সকল সিগন্যালের লিস্টটি পেতে পারেন।

এবার আসুন kill কমান্ডের কিছু ব্যবহার দেখি:

e@howtocode-pc:~$ xlogo &
[1] 11810
me@howtocode-pc:~$ kill -STOP 11810
me@howtocode-pc:~$ jobs
[1]+  Stopped                 xlogo
me@howtocode-pc:~$ kill -CONT %1
me@howtocode-pc:~$ jobs
[1]+  Running                 xlogo &
me@howtocode-pc:~$ kill -9 %1
[1]+  Killed                  xlogo
me@howtocode-pc:~$
  • প্রথম আমরা xlogo & কমান্ড দিয়ে xlogo এর একটি ব্যাকগ্রাউন্ড প্রসেস তৈরী করেছি। যার Job ID হচ্ছে 1 এবং PID হচ্ছে 11810।

  • প্রথম kill কমান্ডটি ছিল kill -STOP 11810 এখানে আমরা কমান্ডের অপশন হিসেবে সিগন্যালের নাম ব্যবহার করেছি। STOP সিগন্যাল প্রসেসটিকে স্টপ বা পজ করবে। এবং প্রসেসটিকে প্রকাশ করেছি তার PID দিয়ে।

  • এরপর jobs কমান্ড দিয়ে আমরা দেখতে পাচ্ছি প্রসেসটি Stopped অবস্থায় আছে।

  • এরপর আমরা যে kill কমান্ডটি ব্যবহার করেছি সেটি ছিল kill -CONT %1। এখানেও অপশন হিসেবে আমরা সিগন্যালটির নাম ব্যবহার করেছি। এবার আমাদের উদ্দেশ্য স্টপ করা প্রসেসটিকে কনটিনিউ করা। তবে এবার আমরা PID না বরং Job ID ব্যবহার করেছি। প্রসেসটির Job ID ছিল 1 তাই আমরা লিখেছি %1।

  • এবার আমরা jobs কমান্ড দিয়ে দেখলাম স্টপড প্রসেসটি রানিং দেখাচ্ছে।

  • এবার আমরা প্রসেসটি বন্ধ করবো। বন্ধ করতে আমরা KILL সিগন্যালটি ব্যবহার করবো। কিন্তু এবারে আমরা সিগন্যালটিকে নাম না তার সংখ্যায় প্রকাশ করছি। KILL সিগন্যালের সংখ্যা হল 9 এবং আমাদের প্রসেসটি Job ID হল 1 তাই আমাদের কমান্ডটি হল kill -9 %1

killall

killall একটি বিশেষ কমান্ড যেটি দিয়ে একজন ইউজার বা একটি প্রোগ্রামের সবগুলো প্রসেসকে একসাথে সিগন্যাল পাঠানো যায়। এর কমান্ডকাঠামো এরকম:

killall [-u user] [-signal] name...

এখানে ইউজার ও সিগন্যাল দুটোই অপশনাল। kill কমান্ডের মত killall ও ডিফল্টভাবে TERM সিগন্যাল পাঠায়।

নীচের উদাহরণে আমরা xlogo & কমান্ড দুবার দিয়ে এর দুটি প্রসেস তৈরী করছি। তারপর killall xlogo কমান্ড দিয়ে তাদের একসাথে টার্মিনেট করছি:

me@howtocode-pc:~$ xlogo &
[1] 24760
me@howtocode-pc:~$ xlogo &
[2] 24761
me@howtocode-pc:~$ killall xlogo
[1]-  Terminated              xlogo
[2]+  Terminated              xlogo

Last updated