]> gitweb.fluxo.info Git - utils-x11.git/commitdiff
Xalarm: better process handling
authorSilvio Rhatto <rhatto@riseup.net>
Wed, 30 May 2018 14:15:16 +0000 (11:15 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Wed, 30 May 2018 14:15:16 +0000 (11:15 -0300)
xalarm

diff --git a/xalarm b/xalarm
index 982c2eba60819a33d83199280057406e12d9e099..dd40331911d4ca20527257362863c0b549c40cc8 100755 (executable)
--- 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