--- 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.