Open In App

Get Process ID of Linux Foreground and Background Processes

Improve
Improve
Like Article
Like
Save
Share
Report

The PID (process identification number) is a serial number (starting from 1) given by the operating system to uniquely identify the process. Every process started either by the operating system or by the user gets a PID in order of their invocation by the kernel. If we start the same process several times, it will be assigned different PID numbers each time. Every process gets some memory allocated to it and CPU usage based on its priority

Note: For a better understanding you can go through these Processes Shell Function Library topics also.

The first process started by the kernel is the init process which consequently gets a process ID of 1. All the PIDs are visible/displayed in the process table.

The types of processes we see in the process table are:

  • Foreground Processes: These processes are user dependent. If the foreground processes are run from the terminal, the shell prompt remains unavailable and will be available only when the foreground process is terminated or stopped.
  • Background Processes: These processes are usually run independently from the user. If a background process is started from a terminal by the user, the shell prompt remains available. One must append & a symbol after the process name in the terminal to start it in the background.
  • Daemon Processes: These are system processes started by the root and they keep running in the background until the system shuts down.
  • Zombie Processes: These are dead/terminated processes that still exist in the process table and have a PID despite having no resources allocated to them. 

Foreground Processes

  • When we start a foreground process from the terminal, the shell prompt is unavailable to the user.
  • To get back the shell prompt, press Ctrl+Z which sends a STOP signal to the process.
  • The process stops and the shell prompt is now available to execute the commands to view the PID of that foreground process.

Start a foreground process say xlogo. Install it if it’s not present by:

sudo apt install x11-apps

1. ps command

The ps command prints the snapshot of processes currently running/paused by the shell. The first column gives us the PID and shows the command which started that particular process. 

ps
Printing PIDs started by the terminal

 

2. jobs command

Although the jobs command shows us the jobspec of the process started by the terminal, combining it with option -l shows the PID as well.

jobs -l
PID is displayed in 2nd column

 

3. pgrep command

The pgrep command only prints the PID of the process. The argument of this command is the process name whose PID we want to print.

pgrep [processName]
Printing PID of xlogo

 

4. pidof command

The pidof command prints the PID of the processes. The argument should be the process name

pidof [processName]
Similar to pgrep

 

Background Processes

  • Some background processes are started in the shell by the user while some of them are by the kernel without any user intervention.
  • To start a background process from the terminal, write the process name(if its address is not stored in the PATH variable, then you have to give its full absolute or relative address) and append the & symbol at the end.
$ process_name &
$ /full/path/to/process_name &

1. ps command

To view the processes in the background started by the terminal, write

ps
ps command displays the immediate snapshot of current processes started by the terminal and their PIDs

 

To view all processes regardless of what terminal (or no terminal) they are controlled by, use option -e

ps -e
Printing all the processes and their PIDs currently running/paused in the system

 

We can pipe the output to grep to view the PID of specific processes.

ps -e | grep -i 'pattern'
First column displays PID of a process named sshd

 

To view the PIDs of processes started by a particular user

ps -u [user]
Listing all processes and their PIDs started by user Soubhik account

 

2. jobs command

jobs with option -l shows the PID of processes run by the terminal.

jobs -l
Starting xlogo and gedit process in background and viewing their PIDs via jobs -l command

 

3. pgrep command

It prints only the PID of the process. The argument is the process name.

pgrep [processName]
Prints the PID of gedit named process running in background

 

To view the PIDs of processes started by a particular user

pgrep -u [user] [processName]
Printing PID of process sshd started by root

 

4. pidof command

The pidof command prints the PID of the processes. The argument should be the process name. It is similar to pidof command.

pidof [arg]
Similar to pidof command. Prints the PID of gedit named process running in background

 

5. top command

The top command displays current processes in real-time. The PID of the processes is displayed as well.

top
The PIDs are displayed in first column

 

Coupling the top command with option -u allows us to view processes started by a particular user.

top -u [user]

Displaying PIDs of processes started by root

Conclusion

In this article we discussed about `ps` command in Linux which is used to show all processes, we also discussed few options available and understand about `jobs` which displays the PID of terminal-run processes, `pgrep` and `pidof` use to find the PID of specific processes, and `top` gives real-time process monitoring. Overall, we can say that these commands offer convenient ways to analyze and control background processes.



Last Updated : 31 Jul, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads