Comment empêcher le shell ADB de quitter lors de Ctrl + C

11

Lorsque je adb shellme connecte à mon appareil (à partir du bureau Windows) et que j'exécute une commande à cet endroit, je souhaite parfois mettre fin à cette commande. La manière standard unixy de le faire est avec Ctrl+Cune combinaison de touches. Cependant, quand je fais cela, l'ensemble se adb shelltermine.

Comment puis-je terminer uniquement le programme en cours à l'intérieur du shell, pas le shell lui-même?

haimg
la source
J'ai lu un message sur le forum affirmant que <kbd> Ctrl </kbd> + <kbd>] </kbd> fonctionnait, mais je l'ai essayé sans succès. Votre kilométrage peut varier. Il semble qu'il n'y ait aucun moyen de faire passer adb Ctrl-C, car il ne capture pas SIGINT. La méthode Ctrl-V standard ne semble pas fonctionner pour Ctrl-C, bien qu'elle ait converti Enter en ^J, malheureusement.
Matthew Read

Réponses:

13

J'ai trouvé une sorte de solution pour cela (au moins pour un téléphone rooté). Si un téléphone est enraciné, busyboxest très probablement installé. sttyfait partie de busybox.

stty intr ^ x

Redéfinit Ctrl+ Xpour agir comme une commande de pause, par exemple ce qui était auparavant Ctrl+ C.

haimg
la source
3
C'est assez génial.
Matthew Read
5

Alt- NumPad 3+ Enterfonctionne pour moi. Alt- NumPad 0- NumPad 3+ Enterfonctionne également et affiche "^ C".

Christian d'Heureuse
la source
3

j'ai pu arrêter le topprocessus et rester dans le shell en tapant ce qui suit dans cet ordre:

C

CTRL+Z

CTRL+M

si je ne tapais pas ces 3 combos, cela ne s'arrêterait pas et je devrais CTRL+ Cpour quitter le shell. J'ai trouvé cela en essayant simplement différentes combinaisons de touches et je l'ai trouvé par accident. YMMV

Ryan Conrad
la source
Ctrl + Z suspend un processus, par exemple vous devez le tuer plus tard avec kill ou killall. Cette solution de contournement est meilleure que rien, cependant ...
haimg
je me suis rendu compte qu'après avoir fait une "sortie". chose drôle, ce n'était pas le ctrl + z qui a fait quoi que ce soit, il n'est pas retourné au shell jusqu'à ce que je fasse ctrl + m, et si je n'ai pas tapé "c" en premier, il n'a rien fait.
Ryan Conrad
Cela ne fonctionne pas pour moi (je n'ai vmstatpas essayé topcependant). Fait intéressant, lorsque j'appuie, Ctrl-Zil semble que rien ne se passe, mais en fait, mon entrée commence à être redirigée directement vers le shell Windows et non vers adb. La sortie d'adb (de vmstat) continue de s'afficher dans la fenêtre du shell, mais je pourrais taper cd C:(par exemple) et elle s'exécuterait dans le shell Windows. Si je pressais alors Ctrl-Cla sortie s'arrêterait et je verrais la commande que j'avais tapée dans le shell Windows dans les coulisses. Très étrange!
Matthew Read
3

Ctrl+ \suivi par Enterfonctionne généralement bien.

Cela enverra un signal SIGQUIT qui peut ne pas être approprié pour un serveur (vide un fichier core par exemple) mais je ne pense pas que ce soit un problème en l'utilisant sur un téléphone / tablette Android (qui ne vide pas un fichier core par défaut ). Solution simple qui fonctionne dans la plupart des cas.

dazweeja
la source
3

Sous Windows, vous pouvez simplement saisir [Alt] + [3] via le pavé numérique (n'oubliez pas d'appuyer sur Entrée par la suite).
Cela envoie [Ctrl] + [c] au shell, mettant ainsi fin à la commande actuelle:

D: \ Android> shell adb
$ chat
chat
♥
^ C

$ exit
sortie

D: \ Android>

Notez que [Alt] + [3] produit le ASCII-Char ♥ dans Windows qui est égal à l'ETX-Byte.
Vous pouvez également appuyer sur [Alt] + [0] - [3] (maintenez la touche Alt enfoncée tout en appuyant sur [0] et [3] sur le pavé numérique) si vous ne lancez pas les fenêtres pour afficher un cœur;)

Dralnaw
la source