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 设备上的文件中并从 shell 手动执行,该文件将完美退出,同时保持子进程运行并每 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 回答