# প্রসেস নিয়ন্ত্রণ

আগের লেসনে আমরা প্রসেস দেখা বা মনিটর করার দুটি কমান্ড দেখেছি। এই লেসনে আমরা প্রসেস নিয়ন্ত্রণ করতে শিখবো। যেহেতু যেকোনো প্রসেস নিয়ে পরীক্ষা-নিরীক্ষা করা বিপদজনক হতে পারে তাই আমরা **xlogo** নামের একটি কমান্ডের উপর পরীক্ষা চালাবো। এই কমান্ডটি দিলে আপনি স্ক্রীনে X Window System যা কিনা আপনার গ্রাফিকাল ডেস্কটপের প্রাণ তার একটি লোগো দেখাবে। অতি নিরীহ এই প্রোগ্রামটি নিয়ে গবেষণা করতে বিপদের ঝুঁকি নেই। আপনার লিনাক্স সিস্টেমে গ্রাফিকাল এনভায়রনমেন্ট থাকে এই প্রোগ্রামটি ইন্সটল থাকারই কথা। না থাকলে gedit বা kwrite ব্যবহার করতে পারেন। এগুলো যথাক্রমে জিনোম ও কেডিই এর টেক্সট এডিটর।

আপনি কমান্ডটি দিলে প্রোগ্রামটি আলাদা একটি উইন্ডোতে চালু হবে এবং যতক্ষণ চলবে আপনার টার্মিনাল প্রম্পট ফিরে আসবে না। আপনি প্রোগ্রামটি বন্ধ করে দিলে প্রম্পটি আসবে।

## প্রসেস ব্যহত(বন্ধ) বা ইন্টারাপ্ট করা

আগের মতই কমান্ড দিয়ে প্রোগ্রামটি চালু করুন। স্বাভাবিকভাবেই যতক্ষণ প্রোগ্রামটি চালু থাকবে প্রম্পট থাকবে না। কিন্তু আপনি এখন **Ctrl-c** চাপলে প্রোগ্রামটি বন্ধ হবে এবং প্রম্পটি ফিরে আসবে। এভাবে আমরা অধিকাংশ প্রোগ্রামের প্রসেস ব্যহত, সোজা কথায় বন্ধ করতে পারি।

## প্রসেস ব্যাকগ্রাউন্ডে চালু করা

এমন প্রয়োজন হতে পারে(বা এমনটাই অধিকাংশ সময় প্রয়োজন হয়) যে আপনি একটি প্রোগ্রাম টার্মিনাল থেকে চালু করলেন এবং সেটি চালু রেখেই প্রম্পট ফিরে পেতে চান। সেক্ষেত্রে আপনার প্রোগ্রামটি ব্যাকগ্রাউন্ড প্রসেস হিসেবে চালু করতে হবে। এজন্য কমান্ডের শেষে আপনাকে '**&**' চিহ্ন ব্যবহার করতে হবে। অর্থাৎ আপনি যদি xlogo কমান্ডটি ব্যাকগ্রাউন্ডে চালু করতে চান তবে আপনাকে লিখতে হবে `xlogo &`। এই কমান্ডটি দিলে প্রোগ্রামটি চালু রেখেই আপনাকে প্রম্পট ফেরত দেবে:

```
me@howtocode-pc:~$ xlogo &
[1] 16725
```

কমান্ডটি দেয়ার পর দ্বিতীয় লাইনে দুটি সংখ্যা দেখিয়ে আমাদের প্রম্পটি ফেরত দেবে টার্মিলান। এরমধ্যে প্রথমে ব্রাকেটের মধ্যে সংখ্যাটি জব নাম্বার এবং পরেরটি প্রসেস আইডি(PID)।

আমরা এখন **ps** কমান্ড দিলে বর্তমান প্রসেসগুলোর মধ্যে xlogo এর প্রসেসটি পাবো:

```
me@howtocode-pc:~$ ps
  PID TTY          TIME CMD
16713 pts/14   00:00:00 bash
16725 pts/14   00:00:00 xlogo
16861 pts/14   00:00:00 ps
```

জব নাম্বার শেলের একটি বৈশিষ্ট্য। এটি ওই শেল দিয়ে চালু করা সকল প্রোগ্রাম বা জবের বা প্রসেস যাই বলুন তার একটি করে নাম্বার দিয়ে লিস্ট করে রাখে। **jobs** কমান্ডটি দিয়ে আমরা জবগুলো দেখতে পারি তাদের নাম্বার সহ:

```
me@howtocode-pc:~$ jobs
[1]+  Running                    xlogo &
```

আমরা আমাদের কমান্ডটি এক নাম্বার জব হিসেবে রানিং দেখছি।

## প্রসেস ফোরগ্রাউন্ডে আনা

একটা প্রসেস ব্যাকগ্রাউন্ডে যাওয়ার পর তার উপর কোনো নিয়ন্ত্রণ থাকে না। তাই প্রয়োজন হতে পারে তাকে আবার সামনে বা ফোরগ্রাউন্ডে আনার। এর জন্য আমাদের প্রথমে **jobs** কমান্ডটি দিয়ে প্রসেসটির জব নম্বর জানতে হবে:

```
me@howtocode-pc:~$ jobs
[1]+  Running                    xlogo &
```

এবার আমাদের **fg** কমান্ড ব্যবহার করতে হবে। এবং এর আর্গুমেন্ট হিসেবে % চিহ্নের সাথে জব নাম্বার দিতে হবে। আমাদের প্রোগ্রামের জব নম্বর 1, তাই আমরা লিখবো:

```
me@howtocode-pc:~$ fg %1
xlogo
```

পরের লাইনে প্রোগ্রামটার নাম আসবে এবং অন্যসব ফোরগ্রাউন্ড প্রসেসের মতই বন্ধ না করা পর্যন্ত প্রম্পট ফেরত আসবে না।

## প্রসেস বিরত(Pause) রাখা

কখনো কখনো দরকার হতে পারে একটি প্রসেস বন্ধ না করে শুধু পজ বা ফ্রীজ করে রাখার। কখনো কখনো একটি ফোরগ্রাউন্ড প্রসেসকে ব্যাকগ্রাউন্ডে পাঠানোর জন্য এটি ব্যবহৃত হয়। আমরা প্রথমে টার্মিনালে `xlogo` লিখে প্রোগ্রামটি চালু করি, তারপর Ctrl-z চেপে প্রসেসটাকে স্টপ বা পজ করি:

```
me@howtocode-pc:~$ xlogo
^Z
[1]+  Stopped                 xlogo
me@howtocode-pc:~$
```

দেখা গেলো প্রোগ্রামটিকে একটি স্টপড জব হিসেবে রেখে আমাদের কাছে প্রম্পটি দেয়া হয়েছে। স্টপড মানে কিন্তু ব্যাকগ্রাউন্ড প্রসেস না। আমরা যদি এখন xlogo এর উইন্ডোটা টেনে ছোটবড় করি দেখবেন লোগোটিও ছোটবড় হওয়ার কথা কিন্তু হচ্ছে না। আমরা **bg** কমান্ড দিয়ে প্রসেসটিকে ব্যাকগ্রাউন্ডে আবার চালু করে দিলে সেটি কাজ করবে:

```
me@howtocode-pc:~$ bg %1
[1]+ xlogo &
```
