diff options
author | John Southworth <john.southworth@vyatta.com> | 2011-09-09 18:49:10 -0500 |
---|---|---|
committer | John Southworth <john.southworth@vyatta.com> | 2011-09-09 18:49:10 -0500 |
commit | 269c88bff20c49876e5780dd8bf379e3d1fe1601 (patch) | |
tree | 2a26d086f83592e5c98603a4be24ffd80ab3cb0b /scripts | |
parent | cfdcb8f015619b90212a991bfd8a6d80d9695b2b (diff) | |
download | vyatta-op-269c88bff20c49876e5780dd8bf379e3d1fe1601.tar.gz vyatta-op-269c88bff20c49876e5780dd8bf379e3d1fe1601.zip |
Cleanup background monitor sessions on logout
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/vyatta-monitor-cleanup | 36 |
1 files changed, 36 insertions, 0 deletions
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 + |