Kills tsgo if it exceeds 10GB RAM. Checks once per minute.
mkdir -p ~/bin
cat > ~/bin/tsgo-watcher.sh << 'SCRIPT'
#!/bin/bash
LIMIT_KB=$((10 * 1024 * 1024)) # 10GB in KB
echo "$(date): tsgo-watcher started (limit: 10GB)"
while true; do
sleep 60
pgrep -x tsgo | while read pid; do
rss=$(ps -o rss= -p "$pid" 2>/dev/null | tr -d ' ')
if [[ -n "$rss" && "$rss" -gt "$LIMIT_KB" ]]; then
echo "$(date): Killing tsgo (PID $pid) - using $((rss / 1024))MB"
kill -9 "$pid"
fi
done
done
SCRIPT
chmod +x ~/bin/tsgo-watcher.shcat > ~/Library/LaunchAgents/local.tsgo-watcher.plist << PLIST
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>local.tsgo-watcher</string>
<key>ProgramArguments</key>
<array>
<string>$HOME/bin/tsgo-watcher.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/tmp/tsgo-watcher.log</string>
<key>StandardErrorPath</key>
<string>/tmp/tsgo-watcher.log</string>
</dict>
</plist>
PLISTlaunchctl load ~/Library/LaunchAgents/local.tsgo-watcher.plist| Action | Command |
|---|---|
| View logs | tail -f /tmp/tsgo-watcher.log |
| Stop | launchctl unload ~/Library/LaunchAgents/local.tsgo-watcher.plist |
| Start | launchctl load ~/Library/LaunchAgents/local.tsgo-watcher.plist |
| Check status | launchctl list | grep tsgo |
Edit ~/bin/tsgo-watcher.sh:
- Change
LIMIT_KBfor different memory threshold - Change
sleep 60for different check interval