将shell脚本与内核操作同步



为了在我的嵌入式Linux系统中停止活动,我有以下shell脚本(由busybox解释):

#!/bin/sh
pkill usefulp_program
swapoff /home/.swapfile
umount -l /home
sleep 3 # While I can't find a way to sync, sleep

如果我取下sleep行,脚本立即返回,甚至不等待umount(这是惰性的,因为由于某种原因它拒绝卸载)。你知道我怎样才能等这三个操作全部完成后才完成脚本吗?诉诸任意的sleep看起来不像是一个好的解决方案。

另外,有没有提示为什么我不能没有-lumount ?

您需要等待被终止的进程终止。根据你的评论…

wait <pid>

…不工作!因此,可以循环ala:

while ps -p <pid> > /dev/null; do sleep 1; done

正如其他人已经提到的,您应该并且只在进程终止时使用-l。一个选择,如果它花了很长时间,或者它只是无视你礼貌的停止请求,它会使用不同的信号。选项将是-9到kill/killall/pkill命令发送SIGKILL而不是SIGTERM。如果你不想在第一次尝试时使用锤子,你可以这样做

pkill your_programm
sleep 10
pkill -9 your_programm

最新更新