56 votes

Que fait-il exactement si je clique dans la fenêtre de cmd?

Supposons que j'exécute cmd.exe et que je ping localhost. Ensuite, je ping à nouveau localhost mais je clique dans la fenêtre et le ping s'arrête jusqu'à ce que je presse entrée.

Que se passe-t-il exactement lorsque je clique dans la fenêtre? Est-ce que cela suspend le processus ou quelque chose d'autre? J'ai ajouté une capture d'écran pour clarifier ce problème.

Note : Je ne clique pas réellement mais je fais glisser en utilisant la souris ce qui crée un cadre blanc dans la fenêtre comme vous pouvez le voir sur la capture d'écran.

Édition : clarification supplémentaire : Ce que je souhaite vraiment savoir c'est si le fait de faire glisser la fenêtre arrête le processus cmd ou non?

Édition : encore plus de précisions : Je sais que j'utilise la fonction d'édition rapide et que presser entrée copie le contenu que j'ai sélectionné. Ce que je ne sais pas, c'est ce qui se passe en arrière-plan.

description de l'image ici

62voto

diegogs Points 624

Une fois que vous cliquez dans la fenêtre de l'invite de commandes, l'hôte de la console n'autorisera plus la sortie à être écrite. L'application elle-même continue de s'exécuter, mais rien n'est écrit à l'écran.

Bien sûr, tant qu'il n'y a qu'un seul thread, c'est essentiellement la même chose que d'avoir votre processus gelé. Comme le thread unique essaie d'écrire une sortie avant de faire plus de travail.

Si je lance ping -t localhost et clique dans la fenêtre de l'invite de commandes, je peux alors inspecter la pile d'appels du thread principal de ping.exe avec Process Explorer.

description de l'image ici

Nous pouvons voir que ping.exe a essayé d'écrire une sortie. Il a appelé write() dans la bibliothèque d'exécution C. Cette fonction, à un moment donné, appelle GetConsoleMode. Apparemment, cette fonction vérifiera si l'utilisateur est actuellement en mode marque et bloquera l'exécution si nécessaire.

Analyse approfondie

Nous pouvons confirmer ce comportement en examinant le comportement de ping avec Wireshark

Lorsque vous exécutez ping -t superuser.com, nous voyons la sortie suivante dans Wireshark:
description de l'image ici

Maintenant, marquons une case dans l'invite de commandes.
description de l'image ici
Soudain, plus de ping ne sont enregistrés dans Wireshark. ping n'envoie plus de paquets.

Mais nous le savions déjà...

D'accord, voyons si la sortie est réellement le problème ici! Redirigeons la sortie vers le périphérique NUL:

description de l'image ici

Maintenant, il n'y a plus aucune sortie. Nous pouvons maintenant marquer du texte dans la boîte toute la journée, les paquets seront enregistrés dans Wireshark.

description de l'image ici

31voto

user29281 Points 115

Lorsque vous sélectionnez du texte dans la fenêtre cmd.exe, le processus se poursuivra en arrière-plan jusqu'à ce qu'il écrive à nouveau sur la sortie standard (ou STDOUT, le flux de données affiché dans la fenêtre cmd.exe).

Lorsque vous quittez le mode de sélection, le processus reprendra normalement.

Vous pouvez tester cela en tapant ping www.google.com -t dans votre fenêtre cmd.exe, et en sélectionnant une partie de la sortie. Vous verrez que cela se met en pause, et lorsque vous désélectionnez la sortie, la reprise se fera.

Édition : Comme mentionné dans le commentaire de Fran, vous pouvez utiliser un outil tel que Wireshark pour voir que l'activité continue après le moment où vous avez effectué la sélection, puis s'arrête.

6voto

Cela est dû au fait que la fenêtre est entrée en mode Marquer. Quand vous appuyez sur Entrée, le texte sélectionné est copié dans le presse-papiers. À ma connaissance, il n'y a pas de réglage pour cela, donc je ne suis pas sûr pourquoi cela se produit quand vous cliquez simplement dans la fenêtre. Normalement, vous devez faire un clic droit et appuyer sur "Marquer". Vérifiez qu'aucune touche de votre clavier n'est coincée.

6voto

Nam Phung Points 437

Votre fenêtre CMD est en mode édition rapide, ce qui active automatiquement le mode édition lorsque vous cliquez sur l'écran. La touche Entrée sert à copier le texte dans la zone blanche et à sortir du mode édition.

Normalement, CMD n'active le mode édition que lorsque vous faites un clic droit sur l'écran noir et choisissez Marquer.

Pour revenir à la normale, faites un clic droit sur la barre de titre de la fenêtre et choisissez Propriétés, sélectionnez l'onglet Options et désélectionnez "Mode Édition Rapide", puis cliquez sur OK.

3voto

SeanC Points 3579

Lorsque vous sélectionnez le texte à copier dans la fenêtre (en mode Mark), le système suspend le processus en cours dans cette fenêtre.

Exemple de fichier de commandes :

:test
echo %0
goto test

lorsque cela est exécuté, dès que je marque la zone à copier, l'écran cesse de défiler

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X