Process creation in UNIX : Simplified
raghuncs
Posted on March 15, 2020
Process is an instance of a program in execution. Its also called task or job. For example the command who would display all the users currently logged into Unix. Here the execution of the program who is a process. The actual program resides on the secondary memory (such as hard disk) while the process will be executed in the RAM. (In some cases memory may be allocated from secondary memory as well which is known as virtual memory).
Some key aspects of processes:
Process is “born” when it starts execution and is said to “die” when it completes execution
Kernel takes care of process management
Process communicates with other process through system calls
Process is created by the “fork” system call.
There must be some process which starts ‘fork’ as well. This is called parent process and the new process created is called child process. Each process is associated with “process_id”. The First Process which gets created is Process 0 (called Parent process as told before), when the system boots up. After this process is ‘Forked’ for a child process, process 0 becomes ‘swapper’ process. This process is part of the kernel and will be used for scheduling other processes.
The child process is called ‘Process 1’ which is considered as ancestor of every process in UNIX and is called the ‘init’ process.
After the system gets logged in, the Kernel creates the SHELL process. Hence Shell is also a process and is associated with PID. To know PID type the below command:
echo $$
For example, in the below command:
ls –l | more
The parent process is the shell. ls-l is executed first and the output is fed to more which displays output one page at a time. Hence ls-l and more are two child processes here.
The process creation consists of three phases:
Fork : When a process is said to be forked, it creates a copy of the process. The new process will have a new PID.
Exec: Just creating a new process is not sufficient to execute it. The child process will require to overwrite the code and data of the parent process. This is known as ‘exec’. Note that the no new process is created here. This is just a mechanism to execute the process.
wait: The parent process would call ‘wait’ system call, which would suspend its execution and wait till the child process is complete.
One of the best example of process creation is the logging process.
In a multi user system, once system boots up, process 0 which is part of kernel process forks the init process and becomes the swapper process. The init process then spawns the getty process (which is get terminal- the terminal process). The getty process then execs the login program which waits till the user enters credentials which it validates. If login is successful, it execs the shell program else it exits and the init program again forks and creates the getty process. The below flow diagram would give a clear picture.
https://dev-to-uploads.s3.amazonaws.com/i/2s9ly5nxgx7eo4531tp6.png
Posted on March 15, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.