What is a Process?

A process is a running program. Every command you type, every service in the background, every browser tab — each is a process. The kernel tracks them all in the process table, and every process gets a unique number: the PID.

PIDs and the Process Table

What is a PID? Process ID — a unique number the kernel assigns to every process. PID 1 is always systemd (or init). PIDs count up and wrap around when they hit the max (typically 32768 or 4194304 on modern kernels).
ps aux | head -5 # USER PID %CPU %MEM VSZ RSS TTY STAT COMMAND # root 1 0.0 0.1 168260 12340 ? Ss /sbin/init # root 2 0.0 0.0 0 0 ? S [kthreadd] # Show PID and Parent PID ps -o pid,ppid,comm # PID PPID COMMAND # 1 0 systemd # 899 1 sshd (parent is systemd)

fork() and exec() — How Processes Are Created

How does a new process come into existence? Through two system calls working together. fork() creates a clone of the calling process. exec() replaces that clone's memory with a new program. Together they're called the fork-exec pattern.
When you type "ls" in bash: 1. bash calls fork() - Creates exact copy of bash process - Returns child's PID to bash (parent) - Returns 0 to the child 2. Child process calls exec("/bin/ls") - Kernel replaces child's memory with ls binary - ls starts running from its main() 3. bash calls wait() — waits for child to finish 4. ls finishes, bash shows next prompt
What is copy-on-write in fork? fork() doesn't immediately copy all parent memory — that would be slow. Instead, parent and child share the same physical pages, marked read-only. Only when either process writes to a page does the kernel make a private copy. This makes fork() very fast.

The Process Tree

All processes form a tree — every process has one parent. You can visualize this:

pstree -p # systemd(1) # ├─sshd(899) # │ └─sshd(1234) # │ └─bash(1235) # │ └─pstree(5678) # ├─nginx(1100) # │ ├─nginx(1101) # │ └─nginx(1102) # └─cron(950)

Viewing Processes

# All processes, detailed ps aux # Tree format ps axjf # Specific process ps -p 1234 -o pid,ppid,user,comm,args # Interactive view top htop # if installed (better UI)