nodejs / nodejs/node

child_process: add cross-platform subprocess.killTree([signal])

Ouverte
#64,406 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

child_process
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:

  1. Cross-platform: one call that best-effort terminates the process and its descendants on Windows, Linux, and macOS.
  2. Clear semantics vs kill(): kill() stays single-PID; killTree() is the tree variant.
  3. 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-hoc taskkill in every project
  • Rely on detached + negative PID (Unix-only, requires spawn options up front)
  • Expand subprocess.kill() to kill trees (breaking / surprising; prefer a separate killTree name)

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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. 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

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.