Managing Linux Processes and Services
A process is an instance of a program that is being executed. Understanding how to monitor, manage, and control processes is essential for Linux administration and troubleshooting.
Process Basics
Process States
Linux processes can exist in several states:
- Running: Currently executing or ready to run
- Sleeping: Waiting for a resource or event
- Stopped: Process has been suspended
- Zombie: Process has completed but still has an entry in the process table
- Dead: Process is being terminated
Process Attributes
Every process has:
- PID (Process ID): Unique identifier for the process
- PPID (Parent Process ID): ID of the parent process that spawned it
- UID/GID: User/Group ID of the process owner
- Priority/Nice value: Determines CPU scheduling priority
- Terminal: The controlling terminal (if any)
- Status: Current state of the process
- Command: The command that started the process
Viewing Processes
ps - Process Status
bash
# Basic process information for current terminal
ps
# All processes with detailed information
ps aux
# Display process hierarchy
ps -ef
# Show processes for a specific user
ps -u username
# Custom format (PID, user, command, memory, CPU)
ps -eo pid,user,cmd,%mem,%cpu
top - Interactive Process Viewer
bash
top
Interactive commands within top:
h
: Display helpk
: Kill a process (enter PID)r
: Renice a process (change priority)q
: QuitM
: Sort by memory usageP
: Sort by CPU usageu
: Filter by user
htop - Enhanced top
bash
# Install if not already available
sudo apt install htop # Debian/Ubuntu
sudo dnf install htop # Fedora/RHEL
# Run htop
htop
htop provides a more user-friendly interface with color highlighting and mouse support.
Process Control
Starting Processes
bash
# Run program in foreground
program_name
# Run program in background
program_name &
# Run program with different priority (nice value)
nice -n 10 program_name # Higher value = lower priority
Controlling Running Processes
bash
# Send process to background
Ctrl+Z (to suspend)
bg (to continue in background)
# Bring background process to foreground
fg
# List background jobs
jobs
Terminating Processes
bash
# Gracefully terminate a process
kill PID
# Force kill a process
kill -9 PID
# Kill by process name
killall process_name
# Kill all processes owned by a user
pkill -u username
Common kill signals:
Signal | Number | Purpose |
---|---|---|
SIGHUP | 1 | Hangup, often used to reload configuration |
SIGINT | 2 | Interrupt (same as Ctrl+C) |
SIGTERM | 15 | Terminate gracefully (default signal) |
SIGKILL | 9 | Kill immediately (cannot be ignored) |
SIGSTOP | 19 | Stop process (cannot be ignored) |
Process Monitoring
Process Resource Usage
bash
# Check CPU and memory usage of processes
top
htop
# Show memory usage
free -h
# Check specific process resource usage
ps -p PID -o %cpu,%mem,cmd
System Load Average
bash
# View system load averages for 1, 5, and 15 minutes
uptime
# More detailed view
cat /proc/loadavg
Process Resource Limits
bash
# View resource limits for current shell
ulimit -a
# Set resource limits (example: max file size)
ulimit -f 1000 # Limit file size to 1000 blocks
System Services and Daemons
Using systemd (Modern Linux distributions)
bash
# Start a service
sudo systemctl start service_name
# Stop a service
sudo systemctl stop service_name
# Restart a service
sudo systemctl restart service_name
# Enable service to start at boot
sudo systemctl enable service_name
# Disable service from starting at boot
sudo systemctl disable service_name
# Check service status
sudo systemctl status service_name
# List all services
systemctl list-units --type=service
Using SysVinit (Older Linux distributions)
bash
# Start a service
sudo service service_name start
# Stop a service
sudo service service_name stop
# Restart a service
sudo service service_name restart
# Check service status
sudo service service_name status
# List all services
service --status-all
Scheduling Tasks
Using cron
bash
# Edit current user's crontab
crontab -e
# List current user's crontab entries
crontab -l
# Edit another user's crontab (as root)
sudo crontab -u username -e
Crontab syntax: minute hour day_of_month month day_of_week command
Example entries:
# Run at 2:30am every day
30 2 * * * /path/to/script.sh
# Run every hour
0 * * * * /path/to/script.sh
# Run every Monday at 9am
0 9 * * 1 /path/to/script.sh
Using at for one-time tasks
bash
# Run command at specified time
at 10:00 AM
> command1
> command2
> Ctrl+D
# List pending jobs
atq
# Remove a job
atrm job_number
Background Processes
nohup - Run Command Immune to Hangups
bash
# Run a command that continues after logout
nohup command &
# Output is saved to nohup.out by default
nohup command > output.log 2>&1 &
screen and tmux - Terminal Multiplexers
bash
# Install if not already available
sudo apt install screen tmux # Debian/Ubuntu
sudo dnf install screen tmux # Fedora/RHEL
# Start a screen session
screen
# Detach from screen session
Ctrl+A, then D
# List screen sessions
screen -ls
# Reattach to a screen session
screen -r session_id
Process Priority
nice and renice - Change Process Priority
bash
# Start a process with lower priority
nice -n 10 command # Higher number means lower priority
# Change priority of running process
renice 10 -p PID
Nice values range from -20 (highest priority) to 19 (lowest priority).
Practice Exercises
- Start a process, send it to the background, and then bring it back to the foreground
- Find the processes using the most CPU and memory on your system
- Create a cron job that runs a script every day at midnight
- Use nohup to run a long-running command that will continue after you log out
- Start a service, check its status, and then stop it
- Change the priority of a running process
- Use screen or tmux to create a persistent terminal session
This completes our overview of Linux process management. With these skills, you can effectively monitor and control processes on your Linux system.