我有一个Android Java应用程序,还有一个原生应用程序。 本机应用程序是从Java应用程序启动的,如下所示:
mProcess = Runtime.getRuntime()。exec(cmdLaunch,null,new File(files_dir));
本机进程实际上是在一个循环中运行,并偶尔休眠一次以产生。
这里发生了什么。启动本机进程后,它将运行大约10到15秒。之后它只是暂停。 Java应用程序仍处于前台。 我从logcat日志中知道这一点。什么都没有让它恢复。
因为我正在开发它,所以我开始一个新的调试会话。 这会杀死以前的Java应用程序,并开始一个新的应用程序。
现在暂停的本机进程将恢复并继续按预期运行。 现在这无限期地运行而不会暂停。
这里发生了什么?
当父进程(Java app)被杀死时,子进程(本机应用程序)是否也已被杀死? 为什么一旦父进程被杀死,本机进程就开始运行而没有任何问题。
答案 0 :(得分:0)
好的,得到了这个问题。 本机进程有很多printf语句。 并且本机进程的“stdout”被重定向到父进程。 [这是默认行为]。
父进程从未读取此缓冲区。因此,在本机进程中,'printf'行用于阻止。
因此,当父进程死亡时,重定向必须已停止,或设置为/ dev / null。 因此,本机进程可以自由运行。
无论如何我可以在创建进程时禁用Java代码中的输出重定向吗?