e1e9bb7499
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.1 KiB
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). |
|
false | error_go_core |
|
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
wmctrldeja 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 -icel proceso de la instancia aislada sigue vivo (deseable para reusar). Usa esta funcion para terminarlo de verdad. --purgeborra /tmp/oo_*: pierdes la config del slot (perfil, recientes). El slot se recreara limpio en el siguienteopen. 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 -vy 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 pipefailsin-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.