feat: add process manager and execution store types (0007b, 0007c)
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>
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
---
|
||||
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.
|
||||
Reference in New Issue
Block a user