ollie/tools/process_signal

27 lines
1.0 KiB
Bash
Executable File

#!/usr/bin/env bash
# ollie:prompt
# ## process_signal
#
# Send a signal to a detached background process.
#
# **Args**: `[pid]` or `[pid, signal]`
# - signal: `TERM` (default), `KILL`
#
# ```
# call_tool: calls=[{tool: "process_signal", args: ["12345", "TERM"]}]
# ```
# ollie:end
set -euo pipefail
if [ $# -lt 1 ]; then echo '{"schema": {"type": "array", "items": [{"name": "pid", "type": "string", "description": "Process PID", "required": true}, {"name": "signal", "type": "string", "description": "Signal name (TERM or KILL, default: TERM)", "required": false}], "examples": [["12345", "TERM"], ["12345"]]}}'; exit 1; fi
pid="${1}"
signal="${2:-TERM}"
session="${OLLIE_SESSION_ID:?OLLIE_SESSION_ID not set}"
dbus-send --session --dest=org.ollie.SessionManager --type=method_call --print-reply \
/org/ollie/SessionManager org.ollie.SessionManager.SignalDetached \
"string:$session" "int32:$pid" "string:$signal" 2>&1 | grep -q 'boolean true' && \
echo "Signal $signal sent to PID $pid" || \
{ echo "Failed to signal PID $pid" >&2; exit 1; }