Processes
Programs are sequences of machine instructions stored in a file. However they do not work by themselves. Something needs to load the file’s intructions into memory, direct the CPU to run the program and manage it during runtime. The OS does this via processes.
A process is a running instance of a given program. It can be thought of as a container in which a program runs. This container includes:
- a copy of the program code loaded into memory
- a memory address
- other information about the state of the process
Other than the init
process started by the kernel (PID1) (see ), every process has a parent process that started it. This parent-child relationship creates a tree of processes.
It is possible that a parent process will terminate before one of its child processes. In this instance the child becomes an orphan. When this occurs in #Linux
, the orphan process is adopted by init
.
Below, I have used the pstree
utility to list all the running processes on my machine hierarchically.
Children are represented vertically and horizontally.
├─terminator─┬─zsh───tmux: client
│ ├─zsh───pstree
│ └─6*[{terminator}]
For instance here, terminator
is a child of init
, as are zsh
and tmux
but they are also children of terminator
.pstree
is a child of zsh
and therefore also a child (grandchild) of terminator
.
Each process has a unique identifier called a process identifier, a processID or just PID.