#!/usr/bin/env bash set -euo pipefail LOCK_FILES=( /var/lib/dpkg/lock /var/lib/dpkg/lock-frontend /var/lib/apt/lists/lock /var/cache/apt/archives/lock ) killed=0 for lock in "${LOCK_FILES[@]}"; do if [ ! -f "$lock" ]; then continue fi pid=$(sudo fuser "$lock" 2>/dev/null || true) if [ -z "$pid" ]; then continue fi pid=$(echo "$pid" | tr -s ' ' '\n' | grep -v '^$' | head -1) name=$(ps -p "$pid" -o comm= 2>/dev/null || echo "unknown") echo "Killing PID $pid ($name) holding $lock" sudo kill -9 "$pid" 2>/dev/null || true killed=$((killed + 1)) done if [ $killed -eq 0 ]; then echo "No apt locks held by any process." else # Wait briefly and clean up any stale lock files sleep 1 for lock in "${LOCK_FILES[@]}"; do if [ -f "$lock" ] && ! sudo fuser "$lock" &>/dev/null 2>&1; then sudo rm -f "$lock" fi done echo "Done. $killed lock(s) cleared." fi