如何防止ADB Shell在Ctrl + C时退出


11

当我adb shell从Windows桌面进入设备并在其中运行某些命令时,有时我想终止该命令。标准的unixy方法是使用Ctrl+C组合键。但是,当我这样做时,整体adb shell终止。

我如何才能仅终止shell中的当前程序,而不终止shell本身?


我读了一个论坛帖子,声称<kbd> Ctrl </ kbd> + <kbd>] </ kbd>可以工作,但是我没有运气尝试过。你的旅费可能会改变。似乎没有办法让adb传递Ctrl-C,因为它不能捕获SIGINT。标准Ctrl-V方法似乎不适用于Ctrl-C,尽管^J不幸的是它确实将Enter转换为。
马修(Matthew)

Answers:


13

我发现了一种解决方法(至少对于有根电话)。如果手机已植根,busybox则很可能已安装。stty是busybox的一部分。

stty intr ^ x

重新定义Ctrl+ X以充当break命令,例如以前的Ctrl+ C


3
太棒了
马修(Matthew)


3

top通过按以下顺序键入以下命令,我能够停止该过程并仍然停留在外壳中:

C

CTRL+Z

CTRL+M

如果我没有键入所有3个连击,它将不会停止,并且必须CTRL+ C退出外壳。我只是通过尝试不同的按键组合来发现这一点的,却偶然发现了它。青年汽车


Ctrl + Z暂停进程,例如,您稍后必须使用kill或killall将其杀死。不过,这种解决方法总比没有好...
haimg

我意识到,当我做了一个“出口”。有趣的是,它并不是执行任何操作的ctrl + z,实际上直到我执行ctrl + m时它才返回外壳,如果我没有先输入“ c”,它什么也没做。
瑞安·康拉德

这对我不起作用(我vmstat没有尝试top)。有趣的是,当我按Ctrl-Z它时似乎什么也没发生,但实际上我的输入开始直接重定向到Windows Shell而不是adb。adb的输出(来自vmstat)一直显示在shell窗口中,但是我可以输入cd C:(例如),它将在Windows shell中执行。如果再按Ctrl-C一下,输出将停止,并且在后台看到我在Windows shell中键入的命令。很奇怪!
马修(Matthew)

3

Ctrl+ \其次是Enter一般正常工作。

这将发送可能不适用于服务器的SIGQUIT信号(例如,转储核心文件),但我认为在Android手机/平板电脑上使用此信号不是问题(默认情况下不会转储核心文件) )。适用于大多数情况的简单解决方案。


3

在Windows上,您只需通过数字键盘输入[Alt] + [3](不要忘了之后按Enter键)。
这将[Ctrl] + [c]发送到外壳,从而终止当前命令:

D:\ Android> adb外壳
$猫
猫
♥
^ C

$出口
出口

D:\ Android>

请注意,[Alt] + [3]在Windows中产生的ASCII字符♥等于ETX字节。
如果您不希望通过窗口显示心脏,也可以按[Alt] + [0]-[3](按住数字键盘上的[0]和[3]的同时按住Alt键);)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.