Files
fn_registry/bash/functions/shell/close_onlyoffice_instance.md
T
egutierrez e1e9bb7499 feat(shell): auto-commit con 31 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-14 23:55:16 +02:00

4.1 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, params, output, tested, tests, test_file_path, file_path
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports params output tested tests test_file_path file_path
close_onlyoffice_instance function bash shell 1.0.0 impure close_onlyoffice_instance(instance: string = demo, [--purge]) -> json Termina el/los proceso(s) DesktopEditors de una INSTANCIA AISLADA (slot) de ONLYOFFICE Desktop Editors, identificados por su HOME=/tmp/oo_<instance> leido de /proc/<pid>/environ — asi NUNCA mata la instancia personal del usuario, solo la aislada. Envia SIGTERM, espera ~3s por evento (read -t, sin sleep foreground) y SIGKILL a los que sigan vivos. Con el flag --purge borra ademas los directorios del slot (/tmp/oo_<instance>*). Imprime JSON con instance, killed_pids (array), purged y status (closed|not_running).
onlyoffice
desktop
x11
shell
false error_go_core
name desc
instance nombre del slot aislado a cerrar (default: demo). Solo se matan procesos DesktopEditors cuyo HOME sea /tmp/oo_<instance>
name desc
--purge flag opcional: si se pasa, borra los directorios del slot (/tmp/oo_<instance>*) tras matar los procesos. Sin el flag, solo termina procesos y deja el estado del slot en disco
una linea JSON a stdout: {"instance":"<i>","killed_pids":[<pids>],"purged":true|false,"status":"closed"|"not_running"}. Exit 0 siempre que opere bien (closed si mato procesos, not_running si no habia ninguno del slot), exit 1 si falta dependencia, exit 2 si flag desconocido false
bash/functions/shell/close_onlyoffice_instance.sh

Ejemplo

# Cerrar el slot demo (deja /tmp/oo_demo* en disco para reusar la config)
bash bash/functions/shell/close_onlyoffice_instance.sh demo

# Cerrar y limpiar todo el estado del slot
bash bash/functions/shell/close_onlyoffice_instance.sh demo --purge

# Slot por defecto (demo) sin argumentos
bash bash/functions/shell/close_onlyoffice_instance.sh

# Via fn run
./fn run close_onlyoffice_instance_bash_shell reporte --purge

# Sourceado
source bash/functions/shell/close_onlyoffice_instance.sh
out=$(close_onlyoffice_instance demo --purge)
echo "$out"
# {"instance":"demo","killed_pids":[12345,12350],"purged":true,"status":"closed"}

Cuando usarla

  • Cuando terminas un flujo automatizado con ONLYOFFICE Desktop y quieres cerrar la instancia aislada por completo (cerrar la ventana con wmctrl deja el proceso vivo; esta funcion mata el proceso real).
  • Para liberar recursos de un slot que ya no usas, opcionalmente borrando su estado en /tmp con --purge.
  • Como ultimo paso del ciclo open -> reload -> close, garantizando que no quedan procesos huerfanos de la instancia aislada.

Gotchas

  • Solo mata la instancia aislada: identifica procesos por HOME=/tmp/oo_<instance> en /proc/<pid>/environ. La instancia personal del usuario (HOME real) NUNCA se toca. Esto es por diseño y por seguridad.
  • Cerrar la ventana NO mata el proceso: por eso esta funcion existe. Tras reload/wmctrl -ic el proceso de la instancia aislada sigue vivo (deseable para reusar). Usa esta funcion para terminarlo de verdad.
  • --purge borra /tmp/oo_*: pierdes la config del slot (perfil, recientes). El slot se recreara limpio en el siguiente open. Sin --purge, el estado persiste y el siguiente arranque reusa esa config.
  • El slot vive en /tmp: aunque no purgues, /tmp/oo_<instance>* se pierde al reiniciar el PC. Estado desechable.
  • Requiere X11 + wmctrl + xdotool instalados (coherencia con el grupo, aunque esta funcion solo usa /proc para matar). Comprueba command -v y falla claro si falta alguna; no funciona en Wayland puro sin XWayland para el resto del grupo.
  • Carrera de /proc: si un pid muere entre listarlo y leer su environ, se ignora silenciosamente (guardas 2>/dev/null || true); no rompe la funcion (set -uo pipefail sin -e).
  • SIGKILL como ultimo recurso: tras ~3s de SIGTERM, los procesos vivos reciben SIGKILL. Cambios sin guardar en la app (si los hubiera) se pierden — pero el flujo previsto edita en disco, no en la app, asi que no deberia haber estado sin guardar.