Files
.local/bin/process-track-name

61 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
if [ -z "$1" ]; then
echo "Usage: $0 <program_name|--all>"
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