2

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

#!/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

4

2 回答 2

0

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

wait <pid>

……不行!所以,可以循环阿拉:

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

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

于 2011-04-07T04:53:28.980 回答
0

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

pkill your_programm
sleep 10
pkill -9 your_programm
于 2011-04-08T06:39:49.807 回答