Android adb在后台运行应用程序时挂起

Android adb在后台运行应用程序时挂起,android,shell,adb,command-line-interface,Android,Shell,Adb,Command Line Interface,我有一个应该在后台运行的程序。 我试图使用adb触发它,并获得以下行为: adb shell "app &" adb shell ps | grep myapp 显示应用程序未运行 adb shell $app & $exit 终端未响应的结果。 终止adb进程后,当我通过以下方式进行检查时,终端被释放: adb shell ps | grep myapp 我看到应用程序正在后台运行 有人能解释这种行为吗?如何从命令行运行应用程序,并通过cli在后台运行 Android D

我有一个应该在后台运行的程序。 我试图使用adb触发它,并获得以下行为:

adb shell "app &"
adb shell ps | grep myapp
显示应用程序未运行

adb shell
$app &
$exit
终端未响应的结果。 终止adb进程后,当我通过以下方式进行检查时,终端被释放:

adb shell ps | grep myapp
我看到应用程序正在后台运行

有人能解释这种行为吗?如何从命令行运行应用程序,并通过cli在后台运行

Android Debug Bridge version 1.0.32 
Revision 9e28ac08b3ed-android

您的应用程序是当您连接ADB时生成的shell的子级。退出shell时,您的应用程序将被终止,因为shell已终止。您应该将应用程序与外壳分离:

使用:

使用(在某些Android系统上提供):

如果您(像我一样)遇到挂起adb shell命令的nohup问题,并且如果daemonize不可用,您可以自己用C编写它,如下所示:

#包括
#包括
#包括
#包括
#包括
int main(int argc,字符**argv)
{
int-pid=fork();
如果(pid>0){
printf(“父亲去世”);
返回0;
}
/*重定向_fds():将stdin、stdout和stderr重定向到/dev/NULL*/
(无效)关闭(0);
(无效)关闭(1);
(无效)关闭(2);
(无效)dup(0);
(无效)dup(0);
而(1)
{
printf(“子进程以静默方式运行\n”);
睡眠(1);
/*在这里背景下做些长的事情*/
}
返回0;
}
adb shell "nohup app &"
adb shell daemonize app
adb shell toybox daemonize app