Как предотвратить выход оболочки adb после нажатия Ctrl + C

11

Когда я adb shellзахожу на свое устройство (с рабочего стола Windows) и запускаю там какую-то команду, иногда я хочу прервать эту команду. Стандартный unixy способ сделать это с Ctrl+Cкомбинацией клавиш. Однако, когда я это делаю, все adb shellзаканчивается.

Как я могу завершить только текущую программу внутри оболочки, а не саму оболочку?

haimg
источник
Я прочитал сообщение на форуме, в котором утверждалось, что <kbd> Ctrl </ kbd> + <kbd>] </ kbd> сработал, но я попытался безуспешно. Ваш пробег может варьироваться. По-видимому, нет способа включить adb через Ctrl-C, поскольку он не захватывает SIGINT. Стандартный метод Ctrl-V , по-видимому, не работает для Ctrl-C, хотя ^J, к сожалению , он преобразовал Enter в .
Мэтью Читал

Ответы:

13

Я нашел своего рода обходной путь для этого (по крайней мере, для рутированного телефона). Если телефон рутирован, busyboxскорее всего установлен. sttyявляется частью busybox.

stty intr x

Переопределяет Ctrl+, Xчтобы действовать как команда разрыва, например, что было ранее Ctrl+ C.

haimg
источник
3
Это довольно круто.
Мэтью Читал
5

Alt- NumPad 3+ Enterу меня работает. Alt- NumPad 0- NumPad 3+ Enterтакже работает и отображает «^ C».

Кристиан д'Эрёз
источник
3

я смог остановить topпроцесс и все еще оставаться в оболочке, набрав в следующем порядке:

C

CTRL+Z

CTRL+M

если бы я не набрал все 3 из этих комбинаций, он не остановился бы, и мне пришлось бы CTRL+, Cчтобы выйти из оболочки. Я нашел это, просто попробовав разные комбинации клавиш, и обнаружил это случайно. YMMV

Райан Конрад
источник
Ctrl + Z приостанавливает процесс, например, вы должны убить его позже с помощью kill или killall. Этот обходной путь лучше, чем ничего, однако ...
haimg
Я понял это после того, как сделал «выход». забавно то, что ctrl + z ничего не делал, он фактически не возвращался к оболочке, пока я не нажал ctrl + m, и если я сначала не набрал «c», он ничего не сделал.
Райан Конрад
Это не работает для меня ( хотя я vmstatне пытался top). Интересно, что когда я нажимаю Ctrl-Zэто выглядит как будто ничего не происходит , но на самом деле мой вход начинается перенаправлены прямо в оболочку Windows , а не к ADB. Вывод adb (из vmstat) продолжает появляться в окне оболочки, но я могу напечатать cd C:(например), и он будет выполняться в оболочке Windows. Если бы я затем нажал, Ctrl-Cвывод прекратился бы, и я бы увидел за кадром команду, которую я набрал в оболочке Windows. Очень странно!
Мэтью Прочитал
3

Ctrl+ с \последующим Enterобычно работает нормально.

Это отправит сигнал SIGQUIT, который может быть неподходящим для сервера (например, создает дамп основного файла), но я не думаю, что это проблема при использовании этого на телефоне / планшете Android (который по умолчанию не создает дамп основного файла). ). Простое решение, которое работает в большинстве случаев.

dazweeja
источник
3

В Windows вы можете просто ввести [Alt] + [3] через цифровую клавиатуру (не забудьте потом нажать Enter).
Это отправляет [Ctrl] + [c] в оболочку, тем самым завершая текущую команду:

D: \ Android> Оболочка adb
кот
кошка
♥
^ C

$ выход
выход

D: \ Android>

Обратите внимание, что [Alt] + [3] создает ASCII-Char ♥ в Windows, равный байту ETX.
Вы также можете нажать [Alt] + [0] - [3] (удерживая клавишу Alt, нажимая [0] и [3] на цифровой клавиатуре), если вы не пользуетесь окнами для отображения сердца;)

Dralnaw
источник