aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xxalarm49
1 files changed, 38 insertions, 11 deletions
diff --git a/xalarm b/xalarm
index 982c2eb..dd40331 100755
--- a/xalarm
+++ b/xalarm
@@ -8,6 +8,8 @@
# Parameters
FULLNAME="$0"
BASENAME="`basename $0`"
+XALARMPID="$BASHPID"
+XALARMPPID="$PPID"
# Set alarm
function xalarm_set {
@@ -46,8 +48,15 @@ function xalarm_set {
# List alarms
function xalarm_list {
- ps -U $USER -o pid,state,lstart,command | grep xalarm | grep -v grep | grep -v list | grep -v cancel | grep -v pause | grep -v resume | grep -v reset | grep -v reset-loop | \
- sed -e "s|$FULLNAME||" -e "s|/bin/bash||" | grep -v -- "sed -e"
+ # Simpler process filtering, but might collide with alarm messages
+ #ps -U $USER -o pid,state,lstart,command | grep xalarm | grep -v grep | grep -v list | grep -v cancel | grep -v pause | grep -v resume | grep -v reset | grep -v reset-loop | \
+ # sed -e "s|$FULLNAME||" -e "s|/bin/bash||" | grep -v -- "sed -e"
+
+ # Better, butt more difficult way to filter processes
+ THISPID="$BASHPID"
+ PARENTPID="$PPID"
+ ps -U $USER -o pid,state,lstart,command | grep xalarm | grep -v grep | \
+ sed -e "s|$FULLNAME||" -e "s|/bin/bash||" | grep -v -- "sed -e" | grep -v "^ *$THISPID" | grep -v "^ *$PARENTPID" | grep -v "^ *$XALARMPID" | grep -v "^ *$XALARMPPID"
}
# Return xalarm PIDs
@@ -61,56 +70,74 @@ function xalarm_pids {
fi
}
+# Send a signal to a process
+function xalarm_signal {
+ local pid="$1"
+ local signal="$2"
+
+ if [ -z "$signal" ]; then
+ signal="-TERM"
+ fi
+
+ if ps $1 &> /dev/null; then
+ kill $signal $pid
+ fi
+}
+
# Cancel alarms
function xalarm_cancel {
for pid in `xalarm_pids $1`; do
- kill $pid
+ xalarm_signal $pid
done
}
# Pause alarms
function xalarm_pause {
for pid in `xalarm_pids $1`; do
- kill -STOP $pid
+ xalarm_signal -STOP $pid
done
}
# Resume alarms
function xalarm_resume {
for pid in `xalarm_pids $1`; do
- kill -CONT $pid
+ xalarm_signal -CONT $pid
done
}
# Reset alarms
function xalarm_reset {
for pid in `xalarm_pids $1`; do
- kill -USR1 $pid
+ xalarm_signal -USR1 $pid
done
}
# Reset alarm loop counter
function xalarm_reset_loop {
for pid in `xalarm_pids $1`; do
- kill -USR2 $pid
+ xalarm_signal -USR2 $pid
done
}
# Usage
function xalarm_usage {
- echo "usage: $BASENAME [list|cancel|kill|help|usage|loop] [timedef] [message]"
+ echo "usage: $BASENAME [list|cancel|kill|help|usage|loop|reset|reset-loop] [timedef] [message]"
exit 1
}
# Respond to SIGUSR1
function xalarm_sigusr1 {
- ALARM_RESET="1"
- kill $SLEEP_PID 2> /dev/null
+ if [ ! -z "$SLEEP_PID" ]; then
+ ALARM_RESET="1"
+ kill $SLEEP_PID 2> /dev/null
+ fi
}
# Respond to SIGUSR2
function xalarm_sigusr2 {
- COUNT=0
+ if [ ! -z "$COUNT" ]; then
+ COUNT=0
+ fi
}
# Register traps