#!/bin/bash
set -e
echo "=== Process Creation & Monitoring ==="
echo
echo "# Starting two background processes..."
echo "ping -i 1 127.0.0.1 > /dev/null &"
ping -i 1 127.0.0.1 > /dev/null &
PING_PID=$!
echo "sleep 60 &"
sleep 60 &
SLEEP_PID=$!
echo
echo "# Listing running processes (ps -ef | grep -E 'ping|sleep' | grep -v grep)"
ps -ef | grep -E "ping|sleep" | grep -v grep
echo
echo "=== Process Communication (Pipe Example) ==="
echo
echo "# ls -l | grep .sh"
ls -l | grep .sh || echo "No .sh files found"
echo
echo "=== Signal Handling ==="
echo
echo "# Showing process IDs"
echo "PING PID: $PING_PID"
echo "SLEEP PID: $SLEEP_PID"
echo
echo "# Sending SIGSTOP to ping process (pause it)"
echo "kill -SIGSTOP $PING_PID"
kill -SIGSTOP $PING_PID
sleep 2
echo "# Checking stopped process with ps"
ps -o pid,stat,cmd -p $PING_PID
echo
echo "# Sending SIGCONT to ping process (resume it)"
echo "kill -SIGCONT $PING_PID"
kill -SIGCONT $PING_PID
sleep 2
echo "# Sending SIGKILL to ping process (force kill)"
echo "kill -SIGKILL $PING_PID"
kill -SIGKILL $PING_PID
sleep 2
echo
echo "# Stopping all remaining demo processes"
echo "kill $SLEEP_PID"
kill $SLEEP_PID 2>/dev/null || true
echo
echo "=== Demonstration Complete ==="
echo
echo "Summary of signals used:"
echo " - SIGSTOP: Stops (pauses) a process."
echo " - SIGCONT: Continues a stopped process."
echo " - SIGKILL: Immediately kills a process (cannot be caught or ignored)."