summaryrefslogtreecommitdiff
path: root/offlineimap-killer.sh
diff options
context:
space:
mode:
Diffstat (limited to 'offlineimap-killer.sh')
-rw-r--r--offlineimap-killer.sh31
1 files changed, 31 insertions, 0 deletions
diff --git a/offlineimap-killer.sh b/offlineimap-killer.sh
new file mode 100644
index 0000000..91f9509
--- /dev/null
+++ b/offlineimap-killer.sh
@@ -0,0 +1,31 @@
+#!/bin/bash
+# Usage: offlineimap-killer LIMIT
+#
+# Kills any instance of offlineimap that has been running longer than
+# LIMIT seconds.
+
+pid_uptime() {
+ local pid=$1
+ local sec_uptime=$(cut -d ' ' -f1 /proc/uptime)
+ local tic_started_at
+ tic_started_at=$(cut -d ' ' -f 22 /proc/${pid}/stat 2>/dev/null) ||
+ { echo 0; return 0; }
+ local tic_per_sec=$(getconf CLK_TCK)
+
+ bc <<<"${sec_uptime} - (${tic_started_at}/${tic_per_sec})"
+}
+
+main() {
+ declare -i limit=$1
+ local pids=($(pgrep -x offlineimap))
+ local pid
+ for pid in "${pids[@]}"; do
+ declare -i uptime=$(pid_uptime $pid)
+ if [[ "$uptime" -gt "$pid" ]]; then
+ printf 'Killing %d which has been running for %d seconds' "$pid" "$uptime"
+ kill -9 "$pid"
+ fi
+ done
+}
+
+main "$@"