【发布时间】:2011-04-06 23:49:54
【问题描述】:
为了在我的嵌入式 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 看起来不是一个好的解决方案。
另外,关于为什么我不能在没有-l 的情况下不能umount 的任何提示?
【问题讨论】:
-
您是否尝试将
umount与-f(强制)或-n(不要写入/etc/mtab)标志一起使用? -
umount需要惰性可能意味着某些文件或目录已打开;如果您安装了procfs,请尝试:ls -ld /proc/*/cwd /proc/*/fd/*| grep home以查看是否有任何进程在/home/中具有当前工作目录或在/home中打开文件。 -
仔细观察,需要 -l 似乎是不等待进程终止的结果,因为它使用 /home。
-
当任何进程在挂载点下打开了任何文件,或者进程将其当前目录作为挂载点或挂载点下的目录时,您无法卸载文件系统。如果正如您的评论所暗示的那样,您正在运行的脚本位于
/home下,那么您就是在躲藏起来;你不能卸载/home,直到它的所有文件都没有被使用,并且在脚本运行时文件正在使用中。您必须将脚本从/home文件系统中移出。 -
脚本在 /home 之外。唯一使用 /home 的进程是我要杀死的进程。
标签: linux shell embedded busybox