1

My android app launches a script using Runtime.exec(). The script in turn runs a command that starts a process. I want to capture the pid of that process, so I can keep track of its status and kill it later.

Here's an excerpt from my script:

$exec  $options &
echo pid:$!:

I expect the pid to be echoed right away, but it's not. The command executes as expected, but the pid is not echoed until I manually kill the process that was started by the command. So it seems to be not respecting the request to run the command in the background. Am I doing it wrong, or does Android just not support this?

In case it matters, the command ($exec) that I'm running is a call to a binary executable, and $options expands to the arguments for that executable.

1 Answer 1

0

I was doing it wrong. I had

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

which is fine for the launching of the shell script itself, since it's not a shell command. But in order for the & in the shell script to be interpreted, it must be run...well... in a shell.

So I needed to invoke the shell script the same way I invoke shell commands directly. Like this:

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

With this code and the script below, the binary file runs in the background and the pid is echoed to a file specified as a script arg.

$exec $options &
echo $! > "$1"
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.