2016-04-05 12 views
3

私は明示的に殺されるまでループで無限に実行する簡単な実行可能なLinuxプログラムを持っていると言います。私は、AndroidデバイスからUSBケーブルを取り外した後でも引き続き実行できるような方法で展開できるようにしたいと考えています。私はこのようなプログラムを実行しようとすると、linuxからAndroidで永続的なバックグラウンドプロセスを起動する

$adb shell 
<android_shell>$ /path/to/dir/myprog & 

私はコードを抜きすることだと私は戻ってそれを接続して、

$ps | grep myprog 

を行うとき、私はまだそれが実行して見ることができます。しかし

、私はそれをこのように実行してみてください、

$adb shell /path/to/dir/myprog & 

私は私のコードを抜いた瞬間には、プロセスが殺されて、私はpsともうそれを見つけることができないのです。

1)コマンドを実行する2つの方法の違いは何ですか?

2)私がやっていることを達成するためにデスクトップ端末からコマンドを実行する方法はありますか?

答えて

0

android_shell> $ /パス/に/ディレクトリ/ MYPROG &

このプロセスは、お使いのデバイスのバックグラウンドで実行されています。デバイス内のps。

$ adbのシェル/パス/に/ディレクトリ/ MYPROG &

このプロセスは、明らかにadbdデーモンにADBプロセスのソケット接続がケーブルを取り除くことによって殺され、自分の開発用PCのバックグラウンドで実行されています。 [編集]

解決策: - 使用nohup

adb shell "nohup /path/to/dir/myprog &" 

[EDIT]

LieRyanは"を述べたように重要です。

nohup -

ハングアップ信号シェルに&であなたのプロセスの背景を殺すことができます。 nohupはSIGHUPハングアップをキャッチし、アプリケーションに到達しないように無視します。 adbシェルのケースでは、&が動作しますが、私は&で問題に直面していました。何らかの不明な理由によりプロセスが強制終了します。しかし、その時に理由を突き止めることはできませんでした(nohup)。私は決して問題に直面しませんでした。

+2

ここで重要なのは実際に&を引用することです。見積もりがなければ、&はPCのシェルによって処理され、Androidのシェルに渡されるのではなく、ローカルのadbプロセスのバックグラウンドとして処理されます。 –

+0

@リルワン。あなたは説得力のある議論をしました。しかし、これは真実ではありません。 '$ adb shell/path/to/dir/myprog&'を実行すると、実際にはシェルを起動していて、シェルがプロセスを起動するので、親は実際にシェルになります。正しい答えは、ライ・ライアンの言葉です。見積もりがなければ、端末は私の命令の主張ではなく、バックグラウンド・プロセスであると私の命令を考慮していました。これは私の実際の意図です。引用符を追加すると問題が解決しました。ですから、 '$ adb shell/path/to/dir/myprog&"は私の問題を完全に修正しました。この場合、nohupは必要ではありませんでした。 – shaveenk

+1

@LieRyanあなたがあなたのコメントを答えとして書くことができれば、私はそれを受け入れます。 – shaveenk