7aa7790931
Process spawn/wait/kill functions for subprocess management with output capture, timeout, and process group cleanup. DagRun and DagStepResult types for SQLite execution persistence. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
46 lines
1.6 KiB
Markdown
46 lines
1.6 KiB
Markdown
---
|
|
name: process_kill
|
|
kind: function
|
|
lang: go
|
|
domain: infra
|
|
version: "1.0.0"
|
|
purity: impure
|
|
signature: "func ProcessKill(handle *ProcessHandle, graceSec int) error"
|
|
description: "Termina un subproceso enviando SIGTERM al process group. Espera hasta graceSec segundos a que el proceso muera voluntariamente. Si sigue vivo, envia SIGKILL. Retorna error solo si la senal no pudo entregarse."
|
|
tags: [process, subprocess, kill, signal, sigterm, sigkill, infra]
|
|
uses_functions: []
|
|
uses_types: [process_handle_go_infra]
|
|
returns: []
|
|
returns_optional: false
|
|
error_type: "error_go_core"
|
|
imports: [fmt, syscall, time]
|
|
params:
|
|
- name: handle
|
|
desc: "handle del proceso lanzado por ProcessSpawn"
|
|
- name: graceSec
|
|
desc: "segundos de gracia entre SIGTERM y SIGKILL; 0 envia SIGKILL inmediatamente"
|
|
output: "nil si el proceso fue terminado correctamente; error si la senal no pudo entregarse"
|
|
tested: true
|
|
tests:
|
|
- "kill process"
|
|
test_file_path: "functions/infra/process_spawn_test.go"
|
|
file_path: "functions/infra/process_kill.go"
|
|
---
|
|
|
|
## Ejemplo
|
|
|
|
```go
|
|
h, err := ProcessSpawn("sleep 300", "", nil, "")
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
// Dar 3 segundos de gracia antes de SIGKILL
|
|
if err := ProcessKill(h, 3); err != nil {
|
|
log.Printf("kill failed: %v", err)
|
|
}
|
|
```
|
|
|
|
## Notas
|
|
|
|
Funcion impura: envia senales al sistema operativo. Usa -handle.Pid (negativo) para direccionar el process group completo, matando tanto al proceso principal como a sus hijos. ESRCH se ignora porque significa que el proceso ya murio, lo cual es el objetivo deseado. Comprueba si el proceso sigue vivo con signal 0 (kill -0) cada 100ms durante el grace period.
|