#!/bin/bash declare CURRENT_PTS=$(tty | sed -e s-/--g -e s/dev//g) declare CURRENT_UID=$(id -u) declare CURRENT_UNAME=$(id -un) declare -a MPIDS MODE=$1 MPIDS=( $(ls /var/run/vyatta/monitor/*.pid 2> /dev/null ) ) for pidfile in "${MPIDS[@]}"; do pid=$(<$pidfile) procname=$(cat /proc/$pid/cmdline 2>/dev/null) if [[ "$procname" =~ "tail" ]] ; then # Clean up tail processes that didn't die on logout pts=${pidfile##*-pts} pts=${pts%%.pid} # If the process isn't attaced to the current PTY if [[ "pts$pts" != "$CURRENT_PTS" ]]; then # If I owned this process if cat /proc/$pid/status | grep -q "Uid:.*$CURRENT_UID" ; then # If I'm no longer on the pty that process started on if ! who | grep -q "$CURRENT_UNAME.*pts/$pts" ; then kill $pid rm -rf $pidfile fi fi elif [[ "$MODE" == "LOGOUT" ]]; then # on logout kill all monitors kill $pid rm -rf $pidfile fi else # Clean up killed tail processes rm -rf $pidfile fi done