Jak zapobiec wychodzeniu powłoki adb po Ctrl + C

11

Kiedy wchodzę adb shellna swoje urządzenie (z pulpitu systemu Windows) i uruchamiam tam jakieś polecenie, czasami chcę je zakończyć. Standardowym sposobem uniksowym jest Ctrl+Ckombinacja klawiszy. Jednak kiedy to robię, całość się adb shellkończy.

Jak mogę zakończyć tylko bieżący program wewnątrz powłoki, a nie samą powłokę?

haimg
źródło
Przeczytałem post na forum, który stwierdził, że <kbd> Ctrl </kbd> + <kbd>] </kbd> działa, ale spróbowałem bez powodzenia. Twój przebieg może się różnić. Wydaje się, że nie ma możliwości włączenia adb pass Ctrl-C, ponieważ nie przechwytuje SIGINT. Standardowa metoda Ctrl-V wydaje się nie działać dla Ctrl-C, choć niestety przekonwertowała Enter na ^J.
Mateusz

Odpowiedzi:

13

Znalazłem sposób obejścia tego problemu (przynajmniej dla zrootowanego telefonu). Jeśli telefon jest zrootowany, busyboxnajprawdopodobniej jest zainstalowany. sttyjest częścią busybox.

stty intr ^ x

Przedefiniowuje Ctrl+, Xaby działał jako polecenie przerwania, np. To, co poprzednio Ctrl+ C.

haimg
źródło
3
To całkiem niesamowite.
Mateusz
5

Alt- NumPad 3+ Enterdziała dla mnie. Alt- NumPad 0- NumPad 3+ Enterdziała również i wyświetla „^ C”.

Christian d'Heureuse
źródło
3

byłem w stanie zatrzymać topproces i nadal pozostać w powłoce, wpisując następujące w tej kolejności:

C

CTRL+Z

CTRL+M

jeśli nie wpisałbym wszystkich 3 tych kombinacji, nie zatrzymałoby się to i musiałbym CTRL+, Caby wyjść z powłoki. Znalazłem to, próbując różnych kombinacji klawiszy i znalazłem to przez przypadek. YMMV

Ryan Conrad
źródło
Ctrl + Z zawiesza proces, np. Musisz go później zabić za pomocą kill lub killall. To obejście jest lepsze niż nic ...
haimg
zdałem sobie sprawę, że po tym, jak zrobiłem „wyjście”. co zabawne, to nie ctrl + z zrobił cokolwiek, nie wrócił do powłoki, dopóki nie zrobiłem ctrl + m, a jeśli najpierw nie napisałem „c”, nic nie zrobił.
Ryan Conrad
To nie działa dla mnie ( chociaż vmstatnie próbowałem top). Co ciekawe, kiedy naciskam Ctrl-Z, wygląda na to, że nic się nie dzieje, ale w rzeczywistości moje dane wejściowe są przekierowywane bezpośrednio do powłoki Windows, a nie do adb. Dane wyjściowe adb (z vmstat) ciągle pojawiają się w oknie powłoki, ale mógłbym wpisać cd C:(na przykład) i zadziałałoby w powłoce systemu Windows. Gdybym wtedy nacisnął, Ctrl-Cwyjście zatrzymałoby się i zobaczyłbym za sceną polecenie, które wpisałem do powłoki Windows. Bardzo dziwne!
Mateusz
3

Ctrl+ \następnie Enterzwykle działa dobrze.

Spowoduje to wysłanie sygnału SIGQUIT, który może nie być odpowiedni dla serwera (na przykład zrzuca plik rdzenia), ale nie sądzę, że jest to problem z używaniem go na telefonie / tablecie z Androidem (który domyślnie nie zrzuca pliku rdzenia ). Proste rozwiązanie, które działa w większości przypadków.

dazweeja
źródło
3

W systemie Windows możesz po prostu wpisać [Alt] + [3] za pomocą klawiatury numerycznej (nie zapomnij później nacisnąć Enter).
To wysyła [Ctrl] + [c] do powłoki, tym samym kończąc bieżące polecenie:

D: \ Android> powłoka adb
$ cat
kot
♥
^ C

$ exit
wyjście

D: \ Android>

Zauważ, że [Alt] + [3] wytwarza ASCII-Char ♥ w Windows, który jest równy bajtowi ETX.
Możesz także nacisnąć [Alt] + [0] - [3] (przytrzymaj klawisz Alt, jednocześnie naciskając [0] i [3] na klawiaturze numerycznej), jeśli nie poruszasz okienkiem, aby wyświetlić serce;)

Dralnaw
źródło