1

我的 android 应用程序使用 Runtime.exec() 启动脚本。该脚本依次运行启动进程的命令。我想捕获那个进程的pid,这样我就可以跟踪它的状态并在以后杀死它。

这是我的脚本的摘录:

$exec  $options &
echo pid:$!:

我希望 pid 会立即得到回应,但事实并非如此。该命令按预期执行,但在我手动终止该命令启动的进程之前,不会回显 pid。所以它似乎不尊重在后台运行命令的请求。我做错了吗,还是Android不支持这个?

如果它很重要,我正在运行的命令 ($exec) 是对二进制可执行文件的调用,并且 $options 扩展为该可执行文件的参数。

4

1 回答 1

0

我做错了。我有

Runtime.getRuntime().exec(new String[]{"/path/to/script"}, env);

这对于启动 shell 脚本本身来说很好,因为它不是 shell 命令。但是为了&解释 shell 脚本,它必须在 shell 中运行……嗯……。

所以我需要像直接调用 shell 命令一样调用 shell 脚本。像这样:

 Runtime.getRuntime().exec(new String[]{"/system/bin/sh", "/path/to/script", scriptArgs...}, env);

使用此代码和下面的脚本,二进制文件在后台运行,并且 pid 被回显到指定为脚本 arg 的文件中。

$exec $options &
echo $! > "$1"
于 2014-03-19T02:25:53.763 回答