#!/bin/bash if [ -z "$1" ]; then echo "Usage: $0 " echo " program_name: track a specific program" echo " --all: track all processes system-wide" exit 1 fi PROGRAM_NAME=$1 OUTPUT_FILE="process_stats.log" TRACK_ALL=false if [ "$PROGRAM_NAME" = "--all" ]; then TRACK_ALL=true OUTPUT_FILE="all_process_stats.log" fi touch $OUTPUT_FILE if [ "$TRACK_ALL" = true ]; then echo "tracking system-wide CPU and memory usage..." echo "date time,total cpu %, total memory %" >> $OUTPUT_FILE while true; do TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") TOTAL_CPU=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | sed 's/%us,//') TOTAL_MEM=$(free | grep Mem | awk '{printf "%.1f", ($3/$2) * 100.0}') echo "$TIMESTAMP,$TOTAL_CPU,$TOTAL_MEM" >> $OUTPUT_FILE sleep 1 done else echo "date time,pid,total cpu %, total memory %" >> $OUTPUT_FILE while true; do PIDS=$(pgrep -x $PROGRAM_NAME | grep -v $$ | grep -v $(pgrep -x pgrep)) if [ -n "$PIDS" ]; then PID=$(echo $PIDS | awk '{print $1}') echo "found process $PROGRAM_NAME with PID $PID" while kill -0 $PID 2>/dev/null; do TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S") echo -n "$TIMESTAMP," >> $OUTPUT_FILE ps -p $PID -o pid,%cpu,%mem,cmd --no-headers >> $OUTPUT_FILE sleep 1 done echo "Process $PROGRAM_NAME with PID $PID has terminated" exit 0 fi sleep 1 done fi