#!/bin/bash

remove() {
    local PIDFILE=$1
    rm -f $PIDFILE
}
killandremove() {
    local PIDFILE=$1
    kill -9 `cat $PIDFILE` >/dev/null 2>&1
    remove $PIDFILE
}
cat_newline() {
    local PIDFILE=$1
    cat $PIDFILE
    echo ""
}
cat_plain() {
    local PIDFILE=$1
    cat $PIDFILE
}

witheach() {
    local CMDPREFIX=$*
    local PIDFILE
    while read PIDFILE; do
        $CMDPREFIX $PIDFILE
    done
}

# ----------------------------------------

allpidfiles() {
    ls ~/.arb_tmp/tmp/arb_pids_${USER}_* 2>&1 | grep -v 'No such file'
}
sessionpidfiles() {
    local PIDFILE=~/.arb_tmp/tmp/arb_pids_${USER}_${ARB_PID}
    if [ -f $PIDFILE ]; then
        echo $PIDFILE
    fi
}

pids2processlist() {
    PIDS=`cat -`
    if [ -z "$PIDS" ]; then
        echo "No matching processes detected."
    else
        ps -p $PIDS
    fi
}

# ----------------------------------------

show_session() {
    sessionpidfiles | witheach cat_plain | pids2processlist
}
session() {
    sessionpidfiles | witheach killandremove
}

show_all() {
    allpidfiles | witheach cat_plain | pids2processlist
}
old() {
    allpidfiles | witheach remove
}
killall() {
    allpidfiles | witheach killandremove
}


# ----------------------------------------

ACTION=$1
if [ -z "$ACTION" ]; then
    echo "Usage: arb_clean [action]"
    echo "Known actions are:"
    echo "    show_all          show process ids of processes that will be killed by action 'killall'"
    echo "    show_session      show process ids of processes that will be killed by action 'session'"
    echo "    session           kill all processes running with current ARB_PID"
    echo "    old               delete old pid-files from /tmp (dont do this while arb is running)"
    echo "    killall           kill all (current or former) arb processes"
    echo "                      CAUTION: may act completely wrong and kill various running non-ARB-processes!"
else
    case $ACTION in
        (session | old | killall | show_all | show_session )
        $ACTION
        ;;
        ( * )
        echo "Unknown action '$ACTION'"
        ;;
    esac
fi