Linux Advanced - Process Management
I will use this space to discuss details about how process management works on Linux systems.
What is a Process?
A running instance of a program or a program in execution is known as a process.
When a command is executed it creates a process. Every process will be assigned a process ID or PID.
For example when you run
date command on a Linux system you invoke a process.
What is Process Management?
Monitoring, tuning, and controlling instances of running applications is known as Process Management.
There are many tools (native and third party) available to manage processes on Linux systems. We will learn about them in detail below.
Different ways to run a process
Fundamentally there exists two ways one process can be run on a Linux system.
Also known as interactive processes, gets initialized through a terminal session by taking its input from the keyboard and sending output back to the same terminal.
These processes will not start automatically as part of the system functions/services and they do not allow any process to run on the terminal until the process is killed or terminated by itself because the prompt would not be available.
root@lco-linux-master:~# ls -l *.txt
Here we are listing all the
text files available in our current directory. The
ls process runs in the foreground and the output gets directed to the terminal screen.
Also known as non interactive processes, are not connected to a terminal or keyboard (stdin) and usually do not need any kind of user input. They run on their own.
When a background process is running we can always initiate other processes within the same terminal from which they are initiated.
If you just add an
& sign to any foreground process it will become a background process.
root@lco-linux-master:~# sleep 500 &  4676 root@lco-linux-master:~# jobs + Running sleep 500 &
Here we are running
sleep command for 500 seconds which helps in delaying the execution and sending that to background.
To check all the background jobs run the
jobs command as follows.
root@lco-linux-master:~# jobs + Running sleep 500 &
To bring back a background process to foreground run
fg command as follows.
There is another way to send a process to background. Run the application/command , then press
ctrl + zand finally run the
ctrl + zin between the execution of the command stops it.
root@lco-linux-master:~# sleep 500 ^Z + Stopped sleep 500 root@lco-linux-master:~# bg + sleep 500 &
What if you have more than one background processes running on the system and wants to bring back one of them to foreground.
Here you can see two processes are running in background with some numbers assigned to them. You can bring them back to foreground by using those numbers with the
For example let me bring back process with job id
2 to foreground.
root@lco-linux-master:~# fg 2
Listing Running Processes
All the running processes can be listed by running
ps (process status) command.
root@lco-linux-master:~# ps -f UID PID PPID C STIME TTY TIME CMD root 4339 4234 0 16:21 pts/1 00:00:00 -bash root 4936 4339 0 17:09 pts/1 00:00:00 sleep 1000 root 4937 4339 0 17:09 pts/1 00:00:00 ps -f
Let us understand all the parameters of this command.
There are few important command arguments which you can use along with
-a -> Shows information about all users.
-x -> Shows information about processes without terminals.
-e -> Displays extended information.
-u -> Shows additional information like -f option.
Stopping or Killing Running Processes
There are several ways to stop or kill a process in Linux.
If a process is running in foreground you can stop or kill that process by pressing
ctrl+c (the default interrupt character).
In order to kill or terminate a process running in background use the
kill command to kill the process as follows. One should be aware of the process PID to kill it.
root@lco-linux-master:~# kill -9 5218
What is kill command?
kill is a native Linux command which sends a signal to specified processes or process groups, causing them to act according to the signal.
Following are the available kill signals.
all kill signals begin with "SIG"; this means
Particularly useful signals include HUP, INT, KILL, STOP, CONT, and 0. Alternate signals may be specified in three ways: -9, -SIGKILL or -KILL.
Signals can be specified in three different ways.
Types of Processes in Linux
There are five types of Processes which exists on a Linux system.
Let us understand each one if them.
In Linux all the processes have a parent process. When the user creates a process in that case the kernel process becomes the parent of that process.
Every Linux process has two ID's assigned to it, the Process ID (
pid) and the Parent process ID (
root@lco-linux-master:~# sleep 500 &  18188 root@lco-linux-master:~# ps -f UID PID PPID C STIME TTY TIME CMD root 3025 2932 0 May09 pts/0 00:00:00 -bash root 18188 3025 0 13:58 pts/0 00:00:00 sleep 500 root 18189 3025 0 13:58 pts/0 00:00:00 ps -f root@lco-linux-master:~# pidof sleep 18188 root@lco-linux-master:~# pstree 3025 bash─┬─pstree └─sleep
Here we have run a background
sleep process. By running
pidof command followed by process name we can find its
pid and by running
ps -f command we can find both
pid and ppid` of a process.
pstree command is used to display a tree of processes and we can clearly see
bash process if the parent process which we ran over terminal via keyboard input (stdin).
The processes which gets created by another process aka it's parent process known as child process.
In our above example, the
sleep process with PID 18188 is a child process of the
bash process with PID 3025.
Usually whenever a child process is killed, the parent process is updated via a
SIGCHLD signal which means now the parent process can do some other task or restart a new child as needed.
But in some cases the parent gets killed before the child process then the child process becomes an orphan process. All the orphan processes then have
Init process (PID 0) as their parent.
At times there are processes which are already dead but still shows up in process list are called Zombie processes. These processes can be found while doing
ps listing, the process with a
Z state are zombie processes. They don't consume any CPU resources.
The system related background running processes are called Daemon Processes. When you see a process running with a
? mark in sixth column (TTY field), that's a daemon process.
Each process running on a Linux system goes through different states in its life cycle.
The below diagram is self explanatory.
To view the dynamic real-time view of the running processes and system resource usage Linux systems natively has a command called
It is the best place to debug your system resources, the process states, system load etc..
When you run the
top command an interactive command mode session gets opened. Top portion of it reports the processes statistics and the resource usage. The lower portion lists the currently running processes.
You can press the Up or Down Arrows, Home, End, and Page Up or Down keys to move up and down and access all the processes.
Let us understand the metrics shown here.
The first line ->
It includes the time, how long your computer has been running, the number of people logged in, and what the load average has been for the past one, five, and 15 minutes.
The second line ->
It shows the number of tasks/processes and their states: running, stopped, sleeping, or zombie.
The third line ->
It displays the following central processing unit (CPU) values:
The fourth line ->
It shows the memory consumption details such as total amount of physical memory, and how much is free, used, and buffered or cached.
The fifth line ->
It shows the swap memory details, and how much is free, used, and available.
The process list columns are as follows:
The process status can be any of the following:
D: Uninterruptible sleep
T: Traced (stopped state)
A brief intro to
nice values :
Nicevalues are user-space values that we can use to control the priority of a process and priority PR is the process's actual priority that is used by Linux kernel. The nice value range is -20 to +19 where -20 is highest, 0 default and +19 is lowest.
That's all for this detailed guide covering all major aspects of Process Management on Linux systems.
Hope you like the article. Stay Tuned for more.
Thank you. Happy learning!