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

时间:2016-04-05 23:00:58

标签: android linux adb

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

$adb shell
<android_shell>$ /path/to/dir/myprog &

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

$ps | grep myprog

我仍然可以看到它正在运行。

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

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

我断开电源线的那一刻,这个过程就被杀了,我无法再使用ps找到它。

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

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

1 个答案:

答案 0 :(得分:4)

  

android_shell&gt; $ / path / to / dir / myprog&amp;

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

  

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

此过程在开发PC的后台运行,显然adb进程与adbd守护程序的套接字连接因删除电缆而被终止。[编辑]

解决方案: - 使用nohup

adb shell "nohup /path/to/dir/myprog &"

[编辑]

正如LieRyan所说"很重要。

nohup -

shell的挂断信号可以使用&来终止您的流程背景。 nohup捕获SIGHUP挂断并忽略,以便它永远不会到达应用程序。 在adb shell的情况下,&会起作用,但我遇到了&的问题,并且由于某些未知原因导致进程被杀死。但当时无法挖掘原因(导致adb shell杀死的原因)。nohup我从未遇到过任何问题。