0
#!/system/bin/sh

(
    lCount=0

    while :; do
        sleep 1

        lCount=$(($lCount + 1))

        log -p v -t test "Running test number $lCount"
    done
) & 

lPid=$!

log -p v -t test "Started at $lPid"

exit 0

やあ。このコードをAndroidデバイスのファイルに入れて、シェルから手動で実行すると、サブプロセスを実行したまま、1秒に1回logcatを出力しながら、ファイルは完全に終了します。ただし、これをinit.dフォルダーに入れて電話を再起動すると、スクリプトが解放されず、init.dの実装によっては、電話が起動しません。

#!/system/bin/sh

(
    lCount=0

    while :; do
        sleep 1

        lCount=$(($lCount + 1))

        log -p v -t test "Running test number $lCount"
    done
) & 

lPid=$!

log -p v -t test "Started at $lPid"

sleep 10

kill -9 $lPid

exit 0

代わりにこのコードをinit.dに入れると、スクリプトは10秒後に解放されるため、スクリプトはサブプロセスの下で続行されます。では、スクリプトが以下で続行される場合、サブプロセスが強制終了されるまで、スクリプトが終了コマンドに到達しない(そして起動を続行する)のはなぜですか?

また、実行するファイルを追加せずに、これを書き直して、私がやりたいことを実行する方法はありますか?

4

1 に答える 1

0

追加してみてください:

# wait for android os
until [ `pidof com.android.systemui` != "" ]; do
  sleep 1
done;
sleep 35;

スクリプトは最初に os を待ちます。

于 2013-05-02T21:24:36.963 に答える