From e0f982d92f2aec9c6bc4fb7d1b712d69eff81b9e Mon Sep 17 00:00:00 2001 From: John Southworth Date: Fri, 9 Sep 2011 18:49:10 -0500 Subject: Cleanup background monitor sessions on logout (cherry picked from commit 269c88bff20c49876e5780dd8bf379e3d1fe1601) --- scripts/vyatta-monitor-cleanup | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/vyatta-monitor-cleanup (limited to 'scripts') diff --git a/scripts/vyatta-monitor-cleanup b/scripts/vyatta-monitor-cleanup new file mode 100644 index 0000000..89eea93 --- /dev/null +++ b/scripts/vyatta-monitor-cleanup @@ -0,0 +1,36 @@ +#!/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) ) + +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 + elsif [[ "$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 + -- cgit v1.2.3