Say I have a simple executable linux program that runs indefinitely in a loop till it is explicitly killed. I want to be able to deploy it in such a way that it continues to run even after I disconnect the USB cable from my Android device. When I try running the program like this,
$adb shell
<android_shell>$ /path/to/dir/myprog &
I am able to disconnect the cord and when I connect it back and do a
$ps | grep myprog
I can still see it running.
However, when I try running it this way,
$adb shell /path/to/dir/myprog &
the moment I disconnect my cord, the process is killed and I am not able to find it anymore with ps
.
1) What is the difference in these two ways of executing the command?
2) Is there a way I can run commands from the desktop terminal in a way to achieve what I'm trying to do?
this process is running in your device's background. ps inside device.
This process is running in your development PC's background, obviously the adb process's socket connection to the adbd daemon gets killed by removing cable.[EDIT]
Solution:- use
nohup
.[EDIT]
As LieRyan mentioned
"
is important.nohup
-A hangup signal to shell can kill your process background with
&
.nohup
catches the SIGHUP hangup and ignores, so that it never reaches the application. In adb shell case,&
will work,But I had faced issue with&
and process get killed due to some unknown reason. But could not dig the reason(what caused adb shell kill) at that time.Withnohup
I never faced any problem.