Watch at EaseHistorias. Respuestas. Perspectiva.

Tecnología · GUÍA PRÁCTICA

¿subprocess de Python agota el tiempo pero deja hijos? Audita el grupo y las tuberías

Rastrea hijo directo, descendientes, sesión, grupo y escritores heredados antes de elegir terminate, señal de grupo o limpieza recursiva.

Original diagram mapping a Python parent, direct child, descendants and inherited pipe writer
Ilustración original: traza la propiedad de proceso, grupo y tubería antes de señalar. Watch at Ease

Un timeout solo prueba que una espera superó el plazo; no demuestra que el trabajo sea un solo PID, que todos los descendientes sigan en un grupo ni que stdout y stderr ya no tengan escritores.

Etiqueta un lanzamiento, conserva topología y estado de tuberías y usa el mecanismo más estrecho que realmente posea el trabajo. Escala tras una espera acotada y valida salida y cierre con el launcher real.

Congela la evidencia antes de limpiar

Registra token, PID padre e hijo, cadena PPID, comando, hora, sesión, PGID y opciones shell/capture antes de que muera el líder.

Separa vida del líder, descendientes restantes y espera de communicate por una tubería abierta.

Elige la unidad de propiedad

Un proceso simple puede usar el contrato del hijo directo; shell, workers o herramientas requieren definir grupo POSIX, conjunto recursivo, job de Windows o solo hijo directo.

No señales un grupo deducido de un PID sin verificar. Registra líder y miembros y excluye servicios ajenos.

Controla solo el grupo POSIX creado

Si todo el árbol pertenece a la petición, usa start_new_session=True. Tras timeout envía señal suave al grupo verificado, espera, escala y recolecta al hijo directo.

Evita preexec_fn ciego en aplicaciones con hilos; usa parámetros documentados y comprueba escapes a otra sesión.

Trata las tuberías como una puerta aparte

La tubería capturada termina solo cuando cierran todos sus escritores. Shell, pool o helper pueden retener stdout/stderr tras morir el hijo.

Conserva salida parcial, resuelve escritores probados y luego drena; no ocultes el bloqueo descartando salida sin una decisión explícita.

Aplica la rama de plataforma y prueba

Sin grupo adecuado, psutil puede capturar descendientes temprano, terminar, esperar, matar supervivientes y verificar identidad.

Repite con launcher real y demuestra árbol fuera, tuberías cerradas, salida según política, hijo recolectado y sentinel ajeno vivo.

Original decision diagram for leader reaping, descendant exit, pipe closure and collateral safety
Ilustración original: exige las cuatro puertas independientes de aceptación del timeout. Watch at Ease