summaryrefslogtreecommitdiff
path: root/src/lib/process.source.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/process.source.sh')
-rw-r--r--src/lib/process.source.sh24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/lib/process.source.sh b/src/lib/process.source.sh
new file mode 100644
index 0000000..5596e03
--- /dev/null
+++ b/src/lib/process.source.sh
@@ -0,0 +1,24 @@
+run_with_timeout() {
+ local -r description="$1"; shift
+ local -r seconds="$1"; shift
+ local -i status=0
+
+ if ! command -v timeout >/dev/null 2>&1; then
+ printf 'ERROR: timeout command is required to run %s\n' \
+ "$description" >&2
+ return 127
+ fi
+
+ if timeout "$seconds" "$@"; then
+ return
+ else
+ status=$?
+ fi
+
+ if (( status == 124 )); then
+ printf 'ERROR: %s timed out after %s seconds\n' \
+ "$description" "$seconds" >&2
+ fi
+
+ return "$status"
+}