从Linux启动Android上的持久后台进程

sha*_*enk 6 linux android adb

假设我有一个简单的可执行linux程序,它在循环中无限期运行,直到它被明确杀死.我希望能够以这样的方式部署它,即使在我从Android设备断开USB电缆之后它仍继续运行.当我尝试运行这样的程序时,

$adb shell
<android_shell>$ /path/to/dir/myprog &
Run Code Online (Sandbox Code Playgroud)

我可以断开电源线,当我连接它并做一个

$ps | grep myprog
Run Code Online (Sandbox Code Playgroud)

我仍然可以看到它在运行.

但是,当我尝试以这种方式运行时,

$adb shell /path/to/dir/myprog &
Run Code Online (Sandbox Code Playgroud)

我断开电源线的那一刻,这个过程就被杀了,我再也找不到了ps.

1)这两种执行命令的方式有什么不同?

2)有没有办法从桌面终端运行命令以实现我想要做的事情?

Ril*_*wan 5

android_shell> $ / path / to / dir / myprog&

此过程正在设备的后台运行。设备内部的ps。

$ adb shell / path / to / dir / myprog&

此过程在开发PC的后台运行,很明显,adb进程与adbd守护程序的套接字连接通过断开电缆而被杀死。[编辑]

解决方案:-使用nohup

adb shell "nohup /path/to/dir/myprog &"
Run Code Online (Sandbox Code Playgroud)

[编辑]

正如LieRyan提到"的那样重要。

nohup--

挂断信号到shell可能会杀死您的进程背景&nohup捕获SIGHUP挂断并忽略,因此它永远不会到达应用程序。在adb shell的情况下,&可以工作,但是&由于一些未知的原因,我遇到了问题并且进程被杀死了。但是当时我无法弄清原因(导致adb shell被杀死的原因)。nohup我从来没有遇到任何问题。

  • 这里重要的一点实际上是引用&。如果不带引号,则PC的外壳会将&视为后台本地adb进程的背景,而不是传递给Android的外壳。 (2认同)