環境:AndroidのバージョンAndroid8
通常、バックグラウンドでプログラムが言葉を使ってコマンドです&することができますが、Androidの8に発見された聞かせて、プログラムはバック確かにあるが、その後、検出プロセスに接続されたUSBケーブルは終了しました抜いてください。この問題が存在するかどうかのAndroidの初期のバージョンは不明。
このようnohupをを追加するなど、いくつかの参照オンラインのLinuxの方法は、動作しない、または終了します。それはまだいくつかの違いLinuxのシェルとAndroidのADBシェルようです。
後工程の最後に、インターネット上の出口への出口を使用すると、背景の終わりにはつながらないだろうという理由で見つかりました。私たちは、出口への出口を使用して、USBを抜いてみてくださいよう。そして、実際に効果的なことがわかりました。しかし、それでもまだ、あなたはnohupをコマンドを使用する必要があります。
そして、測定されたがsetsid nohupをとの違い:現在のユーザがログアウトするときがsetsidは、プロセスが終わって、nohupをしません。
驚くべき事は、初めはnohupをしないの仕事を使用することで、後にすることができ、驚くほど、確率的で試行錯誤によって、そして時には終了しませんしました。
拡張:いくつかの信号につながるプロセスの終了:1,2,3,9,15の、SIGHUP SIGINT、SIGQUIT、SIGKILL、SIGTERM
SIGHUPは、端末が切断されたときに送信される、プラスnohupを端に至る端末切断処理を解消することです。実績のある追加されていないnohupを殺す-1プロセスIDを使用する前に、nohupを殺すの使用が増加した後、プロセスを強制終了することができます-1プロセスIDは、プロセスを終了することはできません。プロセスの確率のUSB端抜きの説明は、他の信号によって引き起こされるであろう。
SIGINT CTRL + Cは、一般的に製造され、
ユーザーが端末上でEscキーを押すとSIGQUITは、割り込み駆動型のプログラムでは、信号を生成し、フォアグラウンドプロセスグループのすべてのプロセスに送信され、(一般的にはCtrl +を使用します)。
SIGKILLは無視され、処理を終了することができません
SIGTERMの kill
コマンドは、デフォルトの終了信号を送り、
、信号は、プロセスのUSB端を切断するリードを特異的に直列接続端子とUSB ADB端子を見つけるために
バックグラウンド処理で実行する端末USB、シリアル端末行わstraceの-p監視プロセスのプロセスIDを、その後、USB検出プロセスを切断はSIGKILL出口を受信することによるものです。
nanosleep({tv_secの= 5、tv_nsec = 1048576}、<未完...>)=?
+++ SIGKILLによって殺さ+++
さらなる実験:バックグラウンド・プロセスの後には、それはSIGKILLシグナル・プロセスを受信しているかどうかを確認するために、終了ADBへの最初の出口を使用しています。実験は終了し、終了ADBの簡単な使用は、SIGKILLシグナルを発行しないことを示し、再びadbのシェルを入力して、バックグラウンド・プロセスはまだ存在しています。USB、発行されていない出口ADBを切断する際に、ADB、次いで、出口、SIGKILL信号にUSBレシーバーを取り外し、その説明は、SIGKILL信号が発行されます。
この信号は、それを送っている人?adb.exe?
我々はオープンUSBし続けることを、唯一adb.exe。実行ADBキル・サーバーを殺すとバックグラウンド・プロセスが殺さトリガーされません。説明は、発行されたコンピュータのadbを終了してはいけません。
まず、信号9受信した処理adbdの終わりに、そのグループのadbdの全てを殺すことに注意してください
INIT:処理アクション(sys.usb.config =なし&& sys.usb.configfs = 1)から(init.rk30board.usb.rc:31)
[80345.876778] INIT:処理アクション(sys.usb.config =なし&& SYS (/init.usb.configfs.rc:1)から.usb.configfs = 1)
):UEVENT を送信しませんでした(0 0(ヌル[80345.879852] android_work)
[80345.880065] configfs-ガジェットガジェット:アンバインド関数「function FSガジェット「/ ffffffc096228e38
[80345.882355] INIT:サービスへの信号9を送る'adbd'(PID 6433)プロセスグループ...
<未完...>)=?
プロセスの関係を表示します。
IS2320:/#psの-e | grepのadbd
シェルを 6501 1 16160 1392 poll_schedule_timeout 4c3aec S adbd
/#nohupを./data/stressapptest -s 720000 -i 4 -C 4 -W --stop_on_errors -M 800> /data/stress.log 2>&1:IS2320 | 1
&[1] 6526
IS2320:/#psの-e | grepの6501
のシェル 6501 1 16160 1420 poll_schedule_timeout 4c3aec S adbd
シェル 6515 6501 8932 3072 sigsuspend 79c9b8f634 S SH IS2320:/#psの-e | grepの6526 ルート 6526 6519 938996 821656 hrtimer_nanosleep ef2601e4 S stressapptest IS2320:/#psの-e | grepの6519
ルート 6519 6515 8932 2916 sigsuspend 75eb0f5634 SのSHのルート6526 6519 938996 821656 hrtimer_nanosleep ef2601e4 S stressapptest ルート6556 6519 10508 3300 0 723b1f9f94 R PSのルート6557 6519 8696 2576 pipe_wait 7d5d16ef94 Sはgrep
プロセスツリーの関係:adbd-> SH-> SH-> stressapptest
すなわち:adbdの終わりには、すべての基本的なプロセスを殺しますときに、ユーザーのバックグラウンド・プロセスは、サブサブプロセスadbdです
ここで見つかり、我々は、2つの方法でこの問題を解決することができます
(1)修正adbd adbdそれが終了したときに子プロセスをkillしないでください
(2)USBの場合adbd終了しない切断、原因を特定adbd USBを切断する際に終了
第二の方法の検討によれば、
ログ:あなたはUSBログを抜いたとき
【82733.413003] INIT:処理アクション(sys.usb.config =なし&& sys.usb.configfs = 1)(init.rk30board.usb.rc:31)から
[82733.413748] INIT:処理アクション(sys.usb.config = (/init.usb.configfs.rc:1)からどれ&& sys.usb.configfs = 1)
[82733.414065] configfs-ガジェットガジェット:アンバインド関数'function FSガジェット' / ffffffc0ca654038
[82733.415158] android_work:UEVENTを送信しませんでした( 0 0(ヌル))
[82733.415385] I NIT:サービスへの信号9を送る'adbd'(PID 6684)プロセスグループ...
[82733.429269] INIT:正常殺さプロセスのcgroupが13msの0 PID 6684をuidを
[82733.430603] INIT:サービス信号9によって殺さ'adbd'(PID 6684)
[82733.433194] INIT:(init.rk30board.usb.rcからアクションを(init.svc.adbd =停止)処理:35)
【82733.433277] INIT:(/init.usb.configfs.rc:15)からの処理動作(init.svc.adbd =停止)
[82733.464425] I NIT:処理アクション(sys.usb.config = ADB && sys.usb。 64):(init.rk30board.usb.rcからconfigfs = 1)
(/init.usb.configfs.rcから処理アクション(sys.usb.config = ADB && sys.usb.configfs = 1):[82733.464591] INIT :18)
[82733.464670]のinit:サービスを開始する'adbd' ...
[82733.466184]のinit:PROPERTY_SET( "ro.boottime.adbd"、 "82733471037723")に失敗しました:プロパティが既に設定
[82733.468090]のinit:作成されたソケット「/ devの/ソケット/ adbd」、モード660は、ユーザ1000、グループ1000年
[82733.476293]は記述子を読み取る
[82733.476379]の文字列を読み取ります
【82733.477581] INIT:処理アクション(sys.usb.config = ADB && sys.usb.configfs = 1 && sys.usb.ffs.ready = 1)から(/init.usb.configfs.rc:21)
ログは、USB抜きトリガする分かるとsys.usb.config =なし&& SYS(31 init.rk30board.usb.rc)から(sys.usb.config =なし&& sys.usb.configfs = 1)。 (/init.usb.configfs.rc:1)からusb.configfs = 1)
然后又触发(sys.usb.config = ADB && sys.usb.configfs = 1)(init.rk30board.usb.rc:64)から和(sys.usb.config = ADB && sys.usb.configfs = 1) (/init.usb.configfs.rc:18)から
最初のピットストップにつながるadbdを開始し、その後adbd
INIT RCは除去するように修飾することができる sys.usb.config =なし&& sys.usb.configfs = 1) (init.rk30board.usb.rcから:31) とsys.usb.config =なし&& sys.usb.configfs = 1)から(/init.usb.configfs.rc:1)動作adbdを停止することができ
参考レビュー:init.usb.configfs.rc sys.usb.config =なし&& sys.usb.configfs = 1にアクションにコメントし、プロセスinit.rk30board.usb.rcではないかもしれません。
説明、コメントだけではない、停止adbdが接続ADBにできない原因となることができ
#on property:sys.usb.config=none && property:sys.usb.configfs=1
# write /config/usb_gadget/g1/UDC "none"
# stop adbd
# setprop sys.usb.ffs.ready 0
# setprop sys.usb.ffs.mtp.ready 0
# write /config/usb_gadget/g1/bDeviceClass 0
# write /config/usb_gadget/g1/bDeviceSubClass 0
# write /config/usb_gadget/g1/bDeviceProtocol 0
# rm /config/usb_gadget/g1/configs/b.1/f1
# rm /config/usb_gadget/g1/configs/b.1/f2
# rm /config/usb_gadget/g1/configs/b.1/f3
# rmdir /config/usb_gadget/g1/functions/rndis.gs4
# setprop sys.usb.state ${sys.usb.config}
修理ADBルートADBデバイス消失後
上記の修正変更
即
on property:sys.usb.config=none && property:sys.usb.configfs=1
write /config/usb_gadget/g1/UDC "none"
stop adbd
setprop sys.usb.ffs.ready 0
setprop sys.usb.ffs.mtp.ready 0
write /config/usb_gadget/g1/bDeviceClass 0
write /config/usb_gadget/g1/bDeviceSubClass 0
write /config/usb_gadget/g1/bDeviceProtocol 0
rm /config/usb_gadget/g1/configs/b.1/f1
rm /config/usb_gadget/g1/configs/b.1/f2
rm /config/usb_gadget/g1/configs/b.1/f3
rmdir /config/usb_gadget/g1/functions/rndis.gs4
setprop sys.usb.state ${sys.usb.config}
改为
on property:service.adb.root=1
write /config/usb_gadget/g1/UDC "none"
stop adbd
setprop sys.usb.ffs.ready 0
setprop sys.usb.ffs.mtp.ready 0
write /config/usb_gadget/g1/bDeviceClass 0
write /config/usb_gadget/g1/bDeviceSubClass 0
write /config/usb_gadget/g1/bDeviceProtocol 0
rm /config/usb_gadget/g1/configs/b.1/f1
rm /config/usb_gadget/g1/configs/b.1/f2
rm /config/usb_gadget/g1/configs/b.1/f3
rmdir /config/usb_gadget/g1/functions/rndis.gs4
setprop sys.usb.state ${sys.usb.config}
参考:https://www.iteye.com/blog/leehomjan-2146739
https://www.cnblogs.com/dspace/p/9825723.html
https://blog.csdn.net/lanyang123456/article/details/60466120
監視プロセス:http://hongjiang.info/shell-script-background-process-ignore-sigint/