将shell脚本与内核操作同步

时间:2011-04-06 23:49:54

标签: linux shell embedded busybox

为了在我的嵌入式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并不是一个好的解决方案。

此外,任何关于为什么我umount没有-l的原因的提示?

2 个答案:

答案 0 :(得分:0)

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

wait <pid>

......不起作用!所以,可以循环ala:

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

在执行swapoff和umount之前等待被终止的进程终止。

答案 1 :(得分:0)

正如其他人已经提到过的那样,当进程终止时,你应该只有-l。一个选项,如果它需要很长/它只是忽略你礼貌的请求停止自己使用不同的信号。 kill / killall / pkill命令的选项为-9,以发送SIGKILL而不是SIGTERM。如果您不想在第一次尝试时使用锤子,则可以执行类似

的操作
pkill your_programm
sleep 10
pkill -9 your_programm