dcd9fedd-5509-4f32-8754-e48.../docs/04_process_management.md

216 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Step 4 — Process Management (Ubuntu 24)
> **Type along** exactly as shown. This step is written for absolute beginners and assumes no prior Linux experience.
> **Estimated time:** ~1015 minutes
---
## What youll learn
- What a **process** is and how to list them
- How to watch the system in real time with **top**
- How to start programs in the **background** and bring them to the **foreground**
- How to **stop/kill** a process safely
- How to view **PIDs** (Process IDs) and understand **signals**
- (Optional) How to adjust priority with **nice/renice**
This expands the original brief step (ps/top/background jobs/kill) into a guided mini-lesson with checks, expected outputs, and troubleshooting.
> **Setup:** Continue using your practice area from previous steps (recommended):
> ```bash
> mkdir -p ~/playground && cd ~/playground
> ```
---
## 0) Whats a “process”?
A **process** is a running program (like the terminal, a text editor, a web browser tab, or a background task).
Linux gives every process a unique number called a **PID** (Process ID). You use the PID to control the process (e.g., to stop it).
---
## 1) List processes with `ps`
Show the first few running processes (system-wide view):
```bash
ps aux | head -n 15
```
- `a` = show processes for **all** users
- `u` = show the user/owner
- `x` = include processes without a controlling terminal
**More readable columns (top 10 by PID):**
```bash
ps -o pid,ppid,user,%cpu,%mem,stat,cmd --sort=pid | head -n 10
```
- `pid` = Process ID
- `ppid` = Parent Process ID
- `%cpu`, `%mem` = CPU and memory usage
- `stat` = state (e.g., `S` sleeping, `R` running, `T` stopped)
- `cmd` = the command used to start the process
---
## 2) Real-time view with `top`
Open an updating view of processes:
```bash
top
```
**Keys you can try inside `top`:**
- `P` = sort by CPU
- `M` = sort by memory
- `1` = show all CPU cores
- `q` = quit
> Optional: Install **htop** (`sudo apt install -y htop`) for a friendlier view. Launch with `htop`, quit with `q`.
---
## 3) Create a background process and manage jobs
Start a harmless background job:
```bash
sleep 300 &
```
- `sleep 300` waits for 300 seconds (5 minutes). The `&` runs it **in the background** so you get your prompt back.
List your jobs:
```bash
jobs
```
Bring the job to the **foreground** (if theres one job, its usually `%1`):
```bash
fg %1
```
Now your terminal is “busy” waiting for `sleep` to finish. Press **Ctrl + C** to stop it.
Start it again in the background and **suspend**, **resume** flow:
```bash
sleep 300 & # start in background
jobs
fg %1 # bring to foreground
# Press Ctrl+Z # suspend the foreground job
bg %1 # resume it in the background
jobs
```
> **Ctrl+Z** = “pause” the foreground process.
> **bg** = continue a paused job in the background.
> **fg** = bring a background job to the foreground.
---
## 4) Find PIDs and kill a process safely
Create a background process to practice on:
```bash
sleep 400 &
```
Find its PID(s):
```bash
pgrep sleep
```
Youll see one or more numbers (PIDs).
**Ask a process to exit nicely (SIGTERM 15):**
```bash
kill 15 <PID>
```
If it doesnt exit after a few seconds, you can **force** it (SIGKILL 9):
```bash
kill -9 <PID>
```
> Use `-9` only if normal signals fail; it doesnt let programs clean up.
**Alternative: kill by name (use carefully):**
```bash
pkill sleep # stops all 'sleep' processes you own
# or
killall sleep
```
Confirm its gone:
```bash
pgrep sleep || echo "No sleep process found"
```
---
## 5) (Optional) Priority: nice and renice
Every process has a **priority** (niceness). Higher nice values (e.g., `+10`) = **lower** priority (more “polite”).
Lower nice values (e.g., `-5`) = **higher** priority (less “polite”). Negative values may require `sudo`.
Start a nice process:
```bash
nice -n 10 sleep 200 &
```
Check niceness (NI column):
```bash
ps -o pid,ni,cmd -p $(pgrep -n sleep)
```
Change niceness of a running process to be **more polite** (higher number):
```bash
renice +15 -p <PID>
ps -o pid,ni,cmd -p <PID>
```
> To set a **negative** niceness (higher priority), you typically need `sudo`.
Stop leftover sleep processes:
```bash
pkill sleep
```
---
## 6) Practice tasks (do them now)
1) Start `sleep 180 &`. Then show your jobs, bring it to the foreground, suspend it, and resume it in the background.
2) Use `pgrep sleep` to find the PID and then terminate the process **politely**. Verify its gone.
3) Launch a “polite” (low-priority) task with `nice` and confirm the NI column shows the expected value.
4) Open `top`, press `P` to sort by CPU and `M` to sort by memory. Quit `top`.
**Hints:**
```bash
sleep 180 &; jobs; fg %1; # then Ctrl+Z
bg %1; jobs
pgrep sleep; kill 15 <PID>; pgrep sleep || echo "done"
nice -n 10 sleep 120 &; ps -o pid,ni,cmd -p $(pgrep -n sleep)
top # then P, M, q
```
---
## Troubleshooting
**Q: I lost my job number. How do I get the PID?**
A: Use `pgrep <name>` (e.g., `pgrep sleep`). Then use `kill` with the PID.
**Q: `kill` didnt stop the process.**
A: Try `kill 15 <PID>` again, wait a moment, then `kill -9 <PID>` as a last resort.
**Q: I see “Operation not permitted” with `renice`.**
A: Negative nice values (higher priority) generally require `sudo`. Increasing the niceness (e.g., `+10`, `+15`) is allowed.
**Q: `top` wont exit.**
A: Press `q` to quit `top`.
---
## Quick Quiz (1 minute)
- What command shows an updating, real-time view of processes?
- Which key in `top` sorts by CPU usage?
- How do you start a command in the background?
- How do you bring job `%1` to the foreground?
- Whats the difference between `kill 15 <PID>` and `kill -9 <PID>`?
**Answers:** `top`; `P`; add `&` at the end; `fg %1`; `15` asks nicely, `-9` forces.
---
## Next Step
Continue to **Step 5 — Permissions & Ownership** to learn how to read and change file permissions and ownership safely.