Skip to Content

Process Basics

তুমি যখন কোনো program চালাও, Linux সেটার জন্য RAM-এ জায়গা বরাদ্দ করে, CPU time দেয়, এবং একটি unique ID দেয় — এটাই process। System-এ কী চলছে সেটা না বুঝলে troubleshooting এবং cybersecurity দুটোই কঠিন।

Processes vs Programs

Program আর process এক জিনিস নয়।

python3 হলো disk-এ থাকা একটি file — এটা program। যখন তুমি python3 app.py চালাও, Linux সেই file-কে RAM-এ load করে এবং CPU দিয়ে execute শুরু করে — এটা তখন একটি process।

একই program থেকে একাধিক আলাদা আলাদা process তৈরি হতে পারে। প্রতিটি প্রসেসের নিজস্ব একটি PID (Process ID) থাকে।

Process Identity

প্রতিটি প্রসেসের পেছনে কিছু আইডেন্টিটি বা পরিচয় থাকে যা লিনাক্স কার্নেল সবসময় ট্র্যাক করে:

প্রপার্টিমানেকেন দরকার
PIDProcess IDপ্রসেসটিকে ইউনিকভাবে চেনার জন্য
PPIDParent PIDকোন প্রসেস থেকে এটি তৈরি হয়েছে তা বোঝার জন্য
UID/EUIDUser IDপ্রসেসটি কোন ইউজারের পাওয়ার নিয়ে চলছে তা দেখতে

Real vs Effective UID: মাঝে মাঝে একটি প্রসেসের দুজন মালিক থাকতে পারে। লিনাক্সে একটি প্রসেসের Real UID হলো সেই ইউজার যে আসলে এটি চালু করেছে। কিন্তু যদি প্রসেসটি কোনো SUID ফাইলের মাধ্যমে চলে, তবে তার Effective UID হতে পারে রুট (root)। এই ট্রিকের মাধ্যমেই সাধারণ ইউজাররা পাসওয়ার্ড চেঞ্জ (passwd) করার মতো রুট লেভেলের কাজ করতে পারে।

ProcFS Internals

লিনাক্সে ** everything is a file **। এমনকি প্রসেসগুলোও কার্নেলের কাছে কিছু ফাইলের সমষ্টি। /proc/ ডিরেক্টরিটি হলো এক ধরণের ভার্চুয়াল ফাইলসিস্টেম যেখানে চলমান সব প্রসেসের তথ্য থাকে।

Terminal
# একটি প্রসেসের (ধরো PID 1234) ফোল্ডারে ঢোকো ls /proc/1234

সেখানে কিছু গুরুত্বপূর্ণ ফাইল থাকে যা ইনভেস্টিগেশনে কাজে লাগে:

  • /proc/[pid]/environ: প্রসেসটির সব এনভায়রনমেন্ট ভ্যারিয়েবল (ম্যালওয়্যার অনেক সময় এখানে সিক্রেট কী লুকিয়ে রাখে)।
  • /proc/[pid]/cmdline: পুরোপুরি কোন কমান্ড দিয়ে এটি চালু হয়েছে।
  • /proc/[pid]/fd: প্রসেসটি এই মুহূর্তে কোন কোন ফাইল বা নেটওয়ার্ক সকেট ব্যবহার করছে।

System Calls

প্রসেসগুলো যখন কোনো কাজ করতে চায় (যেমন: ফাইল পড়া বা নেটওয়ার্কে কানেক্ট করা), তখন তারা সরাসরি হার্ডওয়্যারের কাছে যায় না। তারা লিনাক্স Kernel-কে রিকোয়েস্ট পাঠায়। এই রিকোয়েস্টগুলোকে বলা হয় System Calls বা Syscalls।

একটি প্রসেস কার্নেলের সাথে কী কথা বলছে তা দেখার জন্য strace ব্যবহার করা হয়:

Terminal
# একটি কমান্ড কার্নেলের সাথে কী কী কথা বলছে তা দেখো strace ls /tmp

Monitoring Tools

চলমান প্রসেসগুলো দেখার জন্য আমরা সাধারণত এই টুলগুলো ব্যবহার করি:

  • ps aux: বর্তমানে চলমান সব প্রসেসের একটি স্ন্যাপশট।
  • top: লাইভ প্রসেস মনিটর (রিয়েল-টাইম আপডেট হয়)।
  • htop: top-এর একটি সুন্দর ও ইন্টারঅ্যাক্টিভ ভার্সন।

ps aux এর আউটপুট বোঝা:

Terminal
USER PID %CPU %MEM COMMAND root 1 0.0 0.1 /sbin/init omar 1234 0.5 1.2 python3 app.py

CyberSec Note

Rootkit Detection via /proc:

অ্যাডভান্সড অ্যাটাকাররা অনেক সময় রুটকিট (Rootkit) ব্যবহার করে ps বা top কমান্ডের রেজাল্ট পরিবর্তন করে ফেলে যাতে তাদের ম্যালওয়্যার প্রসেস আমরা দেখতে না পাই। কিন্তু তারা /proc ডিরেক্টরি সহজে লুকাতে পারে না।

আপনি যদি ps কমান্ড ব্যবহার করে কোনো প্রসেস না পান, কিন্তু /proc/ এর ভেতর ফোল্ডারটি খুঁজে পান, তবে বুঝবেন আপনার সিস্টেমে রুটকিট অ্যাটাক হয়েছে।

Terminal
# ps থেকে সব PID নাও ps aux | awk '{print $2}' > ps_pids.txt # /proc থেকে সব PID নাও ls /proc | grep -E "^[0-9]+$" > proc_pids.txt # তুলনা করো diff ps_pids.txt proc_pids.txt

Quick Check

  • প্রোগ্রাম এবং প্রসেসের মধ্যে মূল পার্থক্য কী?
  • কেন একটি প্রসেসের Real UID এবং Effective UID আলাদা হতে পারে?
  • /proc/[pid]/fd এর ভেতরে আমরা কী ধরণের তথ্য পেতে পারি?
  • strace কমান্ডটি কেন লিনাক্স ট্রাবলশুটিং বা ম্যালওয়্যার অ্যানালাইসিসে দরকার হয়?

পরবর্তী → Background Jobs

linux process basics bangla, proc filesystem bengali, strace system calls bengali, real vs effective uid linux, linux process forensics bengali

Last updated on