A process is a running program (binary, executable file) associated with necessary resources
(e.g. address space, registers, open files, signals, etc.) to support running the program. (Process
also provides an abstraction to support multiprogramming.)
A thread is also called a lightweight process. Each thread can fetch and execute instructions
independently (represent an independent control stream), but share address space and many
other resources, such as open files, signals, accounting info, etc., among each other, which is
different from the process model.