Aller au contenu
Mastering Claude

Accueil / Quand ça déraille

Quand ça déraille7 minApplication

Une commande bloquée

Une commande shell qui ne répond plus se coupe par Ctrl+C sans quitter la session, et le délai qui la fait basculer en tâche de fond est déjà fixé par Claude lui même, pas par un préfixe que vous ajoutez à la main.

Une commande shell lancée depuis Claude Code peut rester figée : aucune sortie, aucune fin. Le premier geste est Ctrl+C, qui tente d'interrompre l'opération en cours sans fermer la session. S'il ne suffit pas, fermer le terminal et relancer avec claude --resume dans le même dossier récupère la conversation entière, seule la commande bloquée est perdue.

Le délai n'est pas un réflexe à ajouter soi même

Une habitude répandue consiste à encadrer chaque commande risquée d'un préfixe timeout tapé à la main. Ce n'est pas le mécanisme réel de l'outil Bash intégré à Claude Code. Ce dernier porte déjà un paramètre timeout que Claude choisit lui même d'ajouter quand il anticipe une commande longue, sans intervention de votre part. Deux variables d'environnement bornent ce comportement : BASH_DEFAULT_TIMEOUT_MS fixe le délai par défaut appliqué à chaque commande, BASH_MAX_TIMEOUT_MS fixe le plafond que Claude ne peut pas dépasser même s'il le demande.

# Deux variables d'environnement lues par Claude Code
BASH_DEFAULT_TIMEOUT_MS=120000   # 2 minutes, valeur par défaut
BASH_MAX_TIMEOUT_MS=600000       # 10 minutes, plafond

Le basculement automatique en tâche de fond

Quand une commande atteint son délai sans avoir terminé, Claude Code ne l'arrête pas : il la bascule de lui même en tâche de fond et continue de travailler pendant qu'elle tourne. Trois familles de commandes échappent à ce basculement automatique et restent bloquantes jusqu'au bout : celles qui commencent par sleep, celles qui contiennent git, et les commandes composées que le parseur de sécurité ne sait pas analyser, comme une expansion du type ${PIPESTATUS[0]}. Pour un processus que vous savez long dès le départ, un serveur de développement ou un build en veille, il vaut mieux demander explicitement le paramètre run_in_background plutôt que d'attendre le déclenchement du timeout.

# Simule une commande longue, sans rien modifier sur ce poste
node -e "setTimeout(() => console.log('travail termine'), 5000)"
# Lancee avec run_in_background, elle rend la main immediatement
# et sa sortie se relit plus tard, sans avoir bloque le fil de conversation

La différence entre les deux situations tient à un seul fait : le timeout protège contre une commande qui ne finira jamais, le passage en tâche de fond libère la conversation pendant qu'une commande qui va finir prend son temps. Confondre les deux fait attendre un chat pour rien, ou couper une commande qui allait aboutir.

Cette même logique de reprise sans perte se retrouve quand c'est la session entière qui se bloque plutôt qu'une seule commande, voir boucles, contexte pollué et redémarrage.

Figure 1

D'une commande figée à la reprise du travail

01
Commande lancée
Claude exécute une commande shell dans l'outil Bash, avec un timeout déjà choisi pour cet appel.
02
Plus de sortie
Rien ne s'affiche, la commande semble figée alors que le délai n'est pas encore atteint.
03
Ctrl+C
L'utilisateur interrompt l'opération en cours sans quitter la session Claude Code.
04
Délai atteint
Si personne n'interrompt, Claude Code bascule la commande en tâche de fond dès que BASH_DEFAULT_TIMEOUT_MS ou BASH_MAX_TIMEOUT_MS est atteint, sauf pour sleep, git et les commandes composées illisibles.
05
Travail repris
La conversation continue, la sortie de la commande se relit plus tard sans avoir bloqué le fil.
La séquence montre les deux issues possibles d'une commande qui ne répond plus : l'interruption manuelle par Ctrl+C, ou le basculement automatique en tâche de fond quand le délai de l'outil Bash est atteint.
Figure 2

Les deux bornes du timeout de l'outil Bash

2minutes
délai par défaut appliqué à une commande, variable BASH_DEFAULT_TIMEOUT_MS
code.claude.com/docs/en/tools-reference, 2026-09-02
10minutes
plafond du délai qu'une commande peut atteindre, variable BASH_MAX_TIMEOUT_MS
code.claude.com/docs/en/tools-reference, 2026-09-02
Ces deux valeurs sont lues directement par Claude Code au démarrage et bornent tout appel de l'outil Bash, qu'il s'agisse du délai par défaut ou du plafond que Claude ne peut pas dépasser.
Calibrez vous-même

Un développeur lance depuis Claude Code une commande qui installe des dépendances. Après une minute, l'écran affiche toujours la même ligne, immobile depuis le lancement. Il appuie sur Ctrl+C, la ligne de commande revient, et il relance la même commande avec le paramètre run_in_background.

Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.

Ce qu’il faut retenir
  • Ctrl+C interrompt une commande bloquée sans fermer la session, et claude --resume dans le même dossier récupère la conversation si le terminal doit être fermé.
  • Le paramètre timeout de l'outil Bash est choisi par Claude lui même pour chaque commande, ce n'est pas un préfixe que l'utilisateur tape à la main.
  • BASH_DEFAULT_TIMEOUT_MS fixe le délai par défaut à deux minutes, BASH_MAX_TIMEOUT_MS plafonne ce délai à dix minutes.
  • Au dépassement du délai, Claude Code bascule la commande en tâche de fond au lieu de l'arrêter, sauf pour sleep, git, et les commandes composées non analysables.
  • run_in_background se demande avant de lancer un processus reconnu comme long, pas après qu'il bloque la conversation.
À faire maintenant

Lancez une commande que vous savez longue en demandant explicitement à Claude de la passer en tâche de fond avant qu'elle ne bloque le chat, plutôt que d'attendre qu'elle semble figée pour intervenir.

Vérifier à la source

Chaque affirmation datable de cette leçon renvoie ici au texte public qui la porte. Une source qui ne s’ouvre pas ne prouve rien.