Android init shell和子进程
嗨。 如果我将此代码放入Android设备上的一个文件中,并从shell中手动执行,则该文件将完全退出,同时保持子进程运行并每隔1秒打印一次logcat。但是,如果我将其放入init.d文件夹并重新启动手机,脚本将不会被释放,并且根据init.d实现的不同,手机将不会启动Android init shell和子进程,android,shell,init,Android,Shell,Init,嗨。 如果我将此代码放入Android设备上的一个文件中,并从shell中手动执行,则该文件将完全退出,同时保持子进程运行并每隔1秒打印一次logcat。但是,如果我将其放入init.d文件夹并重新启动手机,脚本将不会被释放,并且根据init.d实现的不同,手机将不会启动 #!/system/bin/sh ( lCount=0 while :; do sleep 1 lCount=$(($lCount + 1)) log -
#!/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
如果我将此代码放入init.d中,脚本将在10秒后释放,因此脚本确实会在子进程下面继续。因此,如果脚本在下面继续,为什么在子进程被终止之前它不会到达exit命令(并继续引导)
还有什么方法可以重写它,使它执行我希望它执行的操作,而不添加要执行的其他文件?尝试添加:
#!/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
脚本将首先等待操作系统。如果有任何帮助,我已将问题定位到logwrapper,它几乎总是用于执行运行部件,然后执行init.d文件夹。如果在没有logwrapper的情况下执行(仅运行部分),它可以正常工作。我需要一种在脚本中强制退出logwrapper的方法。启动子进程后,只需放置“killall logwrapper”。脚本和init.d都将继续,子进程将在后台运行,不会暂停任何操作。不,不会。一些init.d实现在执行所有脚本之前不会引导操作系统。因此,拖延这样的脚本会给一些人带来很多问题。然而,正如上面提到的,简单地终止logwrapper进程就可以解决这个问题。
# wait for android os
until [ `pidof com.android.systemui` != "" ]; do
sleep 1
done;
sleep 35;