child_process: add cross-platform subprocess.killTree([signal])
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.3k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
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.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par l’API child_process subprocess.kill et comparez l’approche des groupes de processus Unix avec Windows taskkill /T /F décrite dans l’issue. Définissez la sémantique multiplateforme de killTree, la correspondance des signaux et les limitations documentées, puis vérifiez le comportement sous Windows, Linux et macOS.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- api, operating-systems
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- Active
- Clarté
- À clarifier
- Accessibilité débutants
- 38/100