Compare commits
No commits in common. "c8680334fae17bbf98ea04b3382f82ab92fda300" and "7fcda270d86579a4140c8b4c4a5e967dd39915ae" have entirely different histories.
c8680334fa
...
7fcda270d8
96
session
96
session
|
|
@ -114,12 +114,6 @@ get_session_pid() {
|
||||||
abduco | tail +2 | grep $session_name | awk '{ print $(NF-1) }'
|
abduco | tail +2 | grep $session_name | awk '{ print $(NF-1) }'
|
||||||
}
|
}
|
||||||
|
|
||||||
get_session_subpid() {
|
|
||||||
local session_name=$1
|
|
||||||
local ppid=$(get_session_pid $session_name)
|
|
||||||
ps --ppid=$ppid | awk 'NR==2 {print $1; exit}'
|
|
||||||
}
|
|
||||||
|
|
||||||
is_existing_session_path() {
|
is_existing_session_path() {
|
||||||
if [ -S $1 ]; then
|
if [ -S $1 ]; then
|
||||||
true
|
true
|
||||||
|
|
@ -201,23 +195,6 @@ print_scrollback() {
|
||||||
tail -n ${config[scrollback]} $log_path
|
tail -n ${config[scrollback]} $log_path
|
||||||
}
|
}
|
||||||
|
|
||||||
kill_recursively() {
|
|
||||||
local pid="$1"
|
|
||||||
local signal="$2"
|
|
||||||
local and_self="${3:-false}"
|
|
||||||
if children="$(pgrep -P "$pid")"; then
|
|
||||||
for child in $children; do
|
|
||||||
kill_recursively "$child" "$signal" true
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
if [[ "$and_self" == true ]]; then
|
|
||||||
kill -$signal "$pid"
|
|
||||||
while kill -0 "$pid" 2>/dev/null;do
|
|
||||||
sleep 0.01;
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
## Parse first argument (= mode argument)
|
## Parse first argument (= mode argument)
|
||||||
mode=$1
|
mode=$1
|
||||||
shift
|
shift
|
||||||
|
|
@ -243,7 +220,6 @@ case $mode in
|
||||||
echo "[attached to '$session_name']"
|
echo "[attached to '$session_name']"
|
||||||
is_logging $session_name && print_scrollback $session_name
|
is_logging $session_name && print_scrollback $session_name
|
||||||
eval $CMD
|
eval $CMD
|
||||||
echo "[detached from '$session_name']"
|
|
||||||
exit $EXITSUCCESS
|
exit $EXITSUCCESS
|
||||||
;;
|
;;
|
||||||
"new"|"n")
|
"new"|"n")
|
||||||
|
|
@ -271,10 +247,10 @@ case $mode in
|
||||||
;;
|
;;
|
||||||
"log")
|
"log")
|
||||||
case "$1" in
|
case "$1" in
|
||||||
"on"|"off"|"status"|"reset");;
|
"on"|"off");;
|
||||||
*)
|
*)
|
||||||
echo >&2 "'$(basename $0) log' accepts:"
|
echo >&2 "'$(basename $0) log' accepts:"
|
||||||
echo >&2 " on, off,status,reset"
|
echo >&2 " on, off"
|
||||||
exit $EXIT_INVALID_SUBMODE
|
exit $EXIT_INVALID_SUBMODE
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
@ -304,25 +280,16 @@ case $mode in
|
||||||
fi
|
fi
|
||||||
echo > $fifo_path
|
echo > $fifo_path
|
||||||
;;
|
;;
|
||||||
"status")
|
|
||||||
if is_logging $session_name; then
|
|
||||||
echo "Logging is activated.";
|
|
||||||
else
|
|
||||||
echo "Logging is not activated.";
|
|
||||||
exit $EXIT_NOT_LOGGING
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
"reset")
|
|
||||||
if is_logging $session_name; then
|
|
||||||
session log off $session_name
|
|
||||||
fi
|
|
||||||
session log on $session_name
|
|
||||||
;;
|
|
||||||
esac
|
esac
|
||||||
exit $EXIT_SUCCESS
|
|
||||||
;;
|
;;
|
||||||
"terminate"|"term"|"t"|"kill"|"k")
|
"terminate"|"term"|"t"|"kill"|"k")
|
||||||
# If no session name specified: kill all sessions
|
# Check if we are in terminate/kill mode
|
||||||
|
if [[ ${mode::1} == "k" ]]; then
|
||||||
|
SIGNAL="-SIGKILL"
|
||||||
|
else
|
||||||
|
SIGNAL="-SIGTERM"
|
||||||
|
fi
|
||||||
|
# If no session name specified: terminate all sessions
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
read -p "Terminate all sessions? [y/N] " -n 1 -r
|
read -p "Terminate all sessions? [y/N] " -n 1 -r
|
||||||
printf "\n"
|
printf "\n"
|
||||||
|
|
@ -339,35 +306,19 @@ case $mode in
|
||||||
exit_if_nonexisting_session $session_name
|
exit_if_nonexisting_session $session_name
|
||||||
fi
|
fi
|
||||||
for sname in ${session_name[@]}; do
|
for sname in ${session_name[@]}; do
|
||||||
# Turn logging off if it is activated
|
PID=$(get_session_pid $sname)
|
||||||
if is_logging $sname; then
|
session_path=$(get_session_path $sname)
|
||||||
session log off $sname
|
log_path=$(get_log_path $sname)
|
||||||
fi
|
fifo_path=$(get_fifo_path $sname)
|
||||||
# Get pid of main process within session
|
[[ -a $fifo_path ]] && echo > $fifo_path
|
||||||
subpid=$(get_session_subpid $sname) # main process
|
[[ ! -z "$PID" ]] && kill $SIGNAL $PID
|
||||||
abdpid=$(get_session_pid $sname) # abduco
|
tail --pid=$PID -f /dev/null
|
||||||
# kill it
|
[[ -a $session_path ]] && rm -f $session_path
|
||||||
if [[ ${mode::1} == "k" ]]; then
|
[[ -a $fifo_path ]] && rm -f $fifo_path
|
||||||
kill -SIGKILL $subpid
|
[[ -f $log_path ]] && rm -f $log_path
|
||||||
else
|
|
||||||
kill_recursively $subpid SIGTERM true
|
|
||||||
fi
|
|
||||||
kill -SIGTERM $abdpid
|
|
||||||
done
|
done
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
;;
|
;;
|
||||||
"processes"|"ps")
|
|
||||||
if [ -z "$1" ]; then
|
|
||||||
exit_if_not_in_session
|
|
||||||
session_name=$ABDUCO_SESSION
|
|
||||||
else
|
|
||||||
session_name=$1
|
|
||||||
exit_if_nonexisting_session $session_name
|
|
||||||
fi
|
|
||||||
pid=$(get_session_pid $session_name)
|
|
||||||
pstree -g "$pid"
|
|
||||||
exit $EXIT_SUCCESS
|
|
||||||
;;
|
|
||||||
"list"|"ls"|"l")
|
"list"|"ls"|"l")
|
||||||
sessions_avail=($(get_available_sessions))
|
sessions_avail=($(get_available_sessions))
|
||||||
for sname in ${sessions_avail[@]}; do
|
for sname in ${sessions_avail[@]}; do
|
||||||
|
|
@ -383,15 +334,6 @@ case $mode in
|
||||||
abduco
|
abduco
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
;;
|
;;
|
||||||
"quit"|"q")
|
|
||||||
exit_if_not_in_session
|
|
||||||
session_name=$ABDUCO_SESSION
|
|
||||||
if is_logging $session_name; then
|
|
||||||
session log off
|
|
||||||
fi
|
|
||||||
echo "exit" | abduco -p $session_name
|
|
||||||
exit $EXIT_SUCCESS
|
|
||||||
;;
|
|
||||||
"help"|"h")
|
"help"|"h")
|
||||||
print_help
|
print_help
|
||||||
exit $EXIT_SUCCESS
|
exit $EXIT_SUCCESS
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue