#!/usr/bin/env bash
# The script checks whether a defined number of Irssi processes are running per
# user and kills any excess instances, keeping only the oldest one(s) active.
#
# v0.1 - 2024-12-29 Initial release
# number of allowed Irssi sessions
allowed_sessions=2
for i in {1..60}; do
declare -A irssi
pof_irssi=$(pidof irssi)
no_abusive=1
# collect irssi PIDs
for pid in $pof_irssi; do
pid_owner=$(ps -o uname= -p $pid)
if [ -z ${irssi[$pid_owner]} ]; then
irssi[$pid_owner]=1
else
((irssi[$pid_owner]++))
fi
done
# proceed with "abusive" users
for ab_user in "${!irssi[@]}"; do
if [ ${irssi[$ab_user]} -gt $allowed_sessions ]; then
no_abusive=0
pof_irssi2=$(pgrep irssi -u $ab_user)
pid_newest=-1
pid_time=-1
for pid in $pof_irssi2; do
tmp_pid_time=$(stat -c %Y /proc/$pid)
if [ $tmp_pid_time -gt $pid_time ]; then
pid_newest=$pid
pid_time=$tmp_pid_time
fi
done
kill $pid_newest
fi
done
unset irssi
if [ $no_abusive -eq 1 ]; then
exit
fi
sleep 1
done