61 lines
1.4 KiB
Bash
Executable File
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
|