Keep Killing It

There are times when even decent chaps have to pick up the sword and fight. I am talking about times when some process on your machine is always peeking over your shoulder. Worst part, consumes a lot of resources, especially CPU time, and obstructs your productivity. Or peace of mind.

For such cases, I give you slay.sh - a little script which looks for a process by its name and keeps killing it.

#!/usr/bin/env bash

screen_width () {
  tput cols
}

patch_spaces_needed () {
  local columns
  columns="$(screen_width)"
  echo "$((columns - ${#1}))"
}

render_msg () {
  num_spaces="$(patch_spaces_needed "$1")"
  printf -v trailing "%0.s " $(seq 1 "$num_spaces")
  echo >&2 -ne "${1}$trailing\r"
}

kill_process_by_name () {
  local process_name="$1"

  if [[ -z "$process_name" ]]; then
    render_msg "Process name to terminate not specified"
  elif pgrep -x "$process_name" >/dev/null; then
    render_msg "Process '$process_name' is running. Killing..."
    sudo pkill -x "$process_name"
  else
    render_msg "Process '$process_name' is not running."
  fi
}

keep_killing_process_by_name () {
  local process_name="$1"
  local interval="${2:-5}"

  while true; do
    kill_process_by_name "$process_name"
    sleep "$interval"
  done
  echo
}

If you would like to keep killing that monitoring daemon, one that monitors you, you just call this:

keep_killing_process_by_name "<process-monitoring-me>" # default interval to check = 5 seconds