child_process: add cross-platform subprocess.killTree([signal])
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- JavaScript
- Estrellas
- 122k
- Forks
- 37.3k
- Merge medio
- 4 d 2 h
- PR fusionados (30 d)
- 283
Descripción
What is the problem this feature will solve?
subprocess.kill([signal]) only targets the direct child PID. Descendants often keep running, especially when:
shell: true(shell exits, real command survives)- the child is a build driver (
bash/make/ninja) that spawns grandchildren - on Windows, where POSIX signals are not real and
kill()does not terminate a process tree
Userland workarounds are fragmented and OS-specific:
- Unix:
detached: true+process.kill(-pid, signal)(process group; not always applicable) - Windows:
taskkill /pid <pid> /T /F(or equivalent) - npm packages such as
tree-kill
This comes up often for Ctrl+C / timeout cleanup in CLIs and build orchestrators.
Related prior request (closed stale): https://github.com/nodejs/node/issues/40438 (killDeep).
What is the feature you are proposing to solve the problem?
Add an explicit, documented API, for example:
subprocess.killTree([signal]);
// and/or
child_process.killTree(pid[, signal]);
Goals:
- Cross-platform: one call that best-effort terminates the process and its descendants on Windows, Linux, and macOS.
- Clear semantics vs
kill():kill()stays single-PID;killTree()is the tree variant. - Document limitations: PID reuse races, process-group vs true tree walk, signal mapping on Windows (where signals are not POSIX).
A reasonable Windows implementation can use the platform tree-terminate facility (today: taskkill /T); Unix can use process-group kill when the child is a group leader, otherwise a documented tree walk.
What alternatives have you considered?
- Keep using
tree-kill/ ad-hoctaskkillin every project - Rely on
detached+ negative PID (Unix-only, requires spawn options up front) - Expand
subprocess.kill()to kill trees (breaking / surprising; prefer a separatekillTreename)
Naming killTree (rather than overloading kill) makes the stronger, OS-dependent behavior opt-in and discoverable.
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comience con la API child_process subprocess.kill y compare el enfoque de grupos de procesos de Unix con Windows taskkill /T /F descrito en el issue. Defina la semántica multiplataforma de killTree, el mapeo de señales y las limitaciones documentadas; después, verifique el comportamiento en Windows, Linux y macOS.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- api, operating-systems
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Activo
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 38/100