child_process: add cross-platform subprocess.killTree([signal])
Nessuno ha ancora preso questa issue.
- Lingua principale
- JavaScript
- Stelle
- 122k
- Fork
- 37.3k
- Merge medio
- 4g 2h
- PR unite (30g)
- 283
Descrizione
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.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Iniziare con l’API child_process subprocess.kill e confrontare l’approccio dei gruppi di processi Unix con Windows taskkill /T /F descritto nell’issue. Definire la semantica multipiattaforma di killTree, la mappatura dei segnali e le limitazioni documentate, quindi verificare il comportamento su Windows, Linux e macOS.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- javascript, node.js
- Ambito
- api, operating-systems
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Attiva
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 38/100