mirror of
https://github.com/ArchiveBox/ArchiveBox.git
synced 2026-01-03 01:15:57 +10:00
continue renaming extractor to plugin, add plan for hook concurrency, add chrome kill helper script
This commit is contained in:
156
bin/kill_chrome.sh
Executable file
156
bin/kill_chrome.sh
Executable file
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env bash
|
||||
# Kill zombie Chrome/Chromium processes listening on 127.0.0.1
|
||||
# Works cross-platform on macOS and Linux
|
||||
#
|
||||
# Usage:
|
||||
# ./bin/kill_chrome.sh # Kill Chrome processes with verification
|
||||
# ./bin/kill_chrome.sh --pkill # Quick kill using pkill (less precise)
|
||||
# ./bin/kill_chrome.sh --help # Show this help
|
||||
|
||||
set -e
|
||||
|
||||
# Detect OS
|
||||
OS="$(uname -s)"
|
||||
|
||||
# Chrome binary patterns to search for (cross-platform)
|
||||
CHROME_PATTERNS=(
|
||||
"Google Chrome"
|
||||
"google-chrome"
|
||||
"chrome"
|
||||
"chromium"
|
||||
"chromium-browser"
|
||||
"Chromium"
|
||||
)
|
||||
|
||||
# Function to kill Chrome processes
|
||||
kill_chrome_processes() {
|
||||
echo "Searching for Chrome processes listening on 127.0.0.1..."
|
||||
local killed=0
|
||||
|
||||
for pattern in "${CHROME_PATTERNS[@]}"; do
|
||||
# Find processes matching the pattern with remote debugging
|
||||
if [ "$OS" = "Darwin" ]; then
|
||||
# macOS
|
||||
pids=$(ps aux | grep -i "$pattern" | grep -E "(remote-debugging-port|remote-debugging-address=127\.0\.0\.1)" | grep -v grep | awk '{print $2}' || true)
|
||||
else
|
||||
# Linux
|
||||
pids=$(ps aux | grep -i "$pattern" | grep -E "(remote-debugging-port|remote-debugging-address=127\.0\.0\.1)" | grep -v grep | awk '{print $2}' || true)
|
||||
fi
|
||||
|
||||
if [ -n "$pids" ]; then
|
||||
echo "Found Chrome processes ($pattern): $pids"
|
||||
for pid in $pids; do
|
||||
# Try regular kill first
|
||||
if kill "$pid" 2>/dev/null; then
|
||||
echo " Killed $pid"
|
||||
killed=$((killed + 1))
|
||||
sleep 0.1
|
||||
fi
|
||||
|
||||
# Check if still alive
|
||||
if ps -p "$pid" > /dev/null 2>&1; then
|
||||
# Check process state first to avoid attempting impossible kills
|
||||
if [ "$OS" = "Darwin" ]; then
|
||||
state=$(ps -o state -p "$pid" 2>/dev/null | tail -1 | tr -d ' ')
|
||||
else
|
||||
state=$(ps -o stat -p "$pid" 2>/dev/null | tail -1 | tr -d ' ')
|
||||
fi
|
||||
|
||||
# Check if it's a zombie/uninterruptible process BEFORE trying to kill
|
||||
if [[ "$state" == *"Z"* ]] || [[ "$state" == *"D"* ]] || [[ "$state" == *"UNE"* ]]; then
|
||||
echo " WARNING: $pid is in uninterruptible/zombie state ($state) - cannot be killed"
|
||||
echo " Process will clean up automatically or requires system reboot"
|
||||
else
|
||||
# Try force kill
|
||||
echo " Force killing $pid with -9..."
|
||||
if kill -9 "$pid" 2>/dev/null; then
|
||||
# Wait briefly and verify
|
||||
sleep 0.2
|
||||
if ! ps -p "$pid" > /dev/null 2>&1; then
|
||||
echo " Force killed $pid"
|
||||
killed=$((killed + 1))
|
||||
else
|
||||
echo " WARNING: $pid survived kill -9 (state: $state)"
|
||||
fi
|
||||
else
|
||||
echo " ERROR: Failed to kill $pid (state: $state)"
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $killed -eq 0 ]; then
|
||||
echo "No Chrome processes listening on 127.0.0.1 found (or all are zombie/uninterruptible)"
|
||||
else
|
||||
echo "Successfully killed $killed Chrome process(es)"
|
||||
fi
|
||||
|
||||
# Show remaining Chrome processes (if any)
|
||||
echo ""
|
||||
echo "Remaining Chrome processes listening on 127.0.0.1:"
|
||||
for pattern in "${CHROME_PATTERNS[@]}"; do
|
||||
ps aux | grep -i "$pattern" | grep -E "(remote-debugging-port|remote-debugging-address=127\.0\.0\.1)" | grep -v grep || true
|
||||
done | head -10
|
||||
|
||||
if [ $(ps aux | grep -iE "(google chrome|chrome|chromium)" | grep -E "(remote-debugging-port|remote-debugging-address=127\.0\.0\.1)" | grep -v grep | wc -l) -eq 0 ]; then
|
||||
echo " (none)"
|
||||
fi
|
||||
}
|
||||
|
||||
# Alternative approach using pkill (faster but less precise)
|
||||
kill_chrome_pkill() {
|
||||
echo "Using pkill to kill all Chrome processes..."
|
||||
|
||||
for pattern in "${CHROME_PATTERNS[@]}"; do
|
||||
if pkill -9 -f "$pattern" 2>/dev/null; then
|
||||
echo " Killed processes matching: $pattern"
|
||||
fi
|
||||
done
|
||||
|
||||
sleep 0.5
|
||||
echo "Done"
|
||||
}
|
||||
|
||||
# Show help
|
||||
show_help() {
|
||||
cat << EOF
|
||||
Kill zombie Chrome/Chromium processes listening on 127.0.0.1
|
||||
|
||||
Usage:
|
||||
$0 [OPTIONS]
|
||||
|
||||
Options:
|
||||
(none) Kill Chrome processes with state verification (recommended)
|
||||
--pkill, -p Quick kill using pkill (faster but less precise)
|
||||
--help, -h Show this help message
|
||||
|
||||
Description:
|
||||
This script finds and kills Chrome/Chromium processes that are listening
|
||||
on 127.0.0.1 (with --remote-debugging-port or --remote-debugging-address).
|
||||
|
||||
Supports multiple Chrome binary names:
|
||||
- Google Chrome / chrome / google-chrome
|
||||
- Chromium / chromium / chromium-browser
|
||||
|
||||
Works on macOS and Linux.
|
||||
|
||||
Zombie/uninterruptible processes (state UNE/Z/D) will be detected and
|
||||
reported but cannot be killed. They will clean up automatically.
|
||||
|
||||
Examples:
|
||||
$0 # Kill with verification
|
||||
$0 --pkill # Quick kill all Chrome processes
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
# Parse arguments
|
||||
if [ "$1" = "--help" ] || [ "$1" = "-h" ]; then
|
||||
show_help
|
||||
elif [ "$1" = "--pkill" ] || [ "$1" = "-p" ]; then
|
||||
kill_chrome_pkill
|
||||
else
|
||||
kill_chrome_processes
|
||||
fi
|
||||
Reference in New Issue
Block a user