A process is a pair of things
A process is not "a running program". It is two kernel-owned objects that live and die together: an address space and a control block.
The address space is the set of virtual memory mappings the task may touch, described on Linux by struct mm_struct. The control block is struct task_struct, the kernel's per-task record: process id, saved register state, scheduling class and priority, the file descriptor table, signal handlers, credentials, and links to parent and children.
The program's instructions live in the address space. Everything the kernel needs in order to manage that program lives in the control block. Every textbook "process control block" is this second object. The split is what makes the rest of the subject possible: one address space can host several execution contexts, and fork() can hand a child an identical address space without copying a single byte of it.

