2

組み込み Linux システムでのアクティビティを停止するために、次のシェル スクリプトを用意しています (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。スクリプトを終了する前に、3 つの操作がすべて完了するのを待つにはどうすればよいか知っていますか? 任意に頼ることはsleep、良い解決策のようには見えません。

また、なぜ私がumountなしではできないのかについてのヒントはあり-lますか?

4

2 に答える 2

0

強制終了されたプロセスが終了するまで待つ必要があります。皆さんのコメント通り...

wait <pid>

...うまくいきません!したがって、alaをループできます:

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

swapoff と umount を実行する前に、強制終了されたプロセスが終了するのを待ちます。

于 2011-04-07T04:53:28.980 に答える
0

他の人がすでに述べたよう-lに、プロセスが終了したときにのみ行う必要があります。時間がかかる場合/丁寧な停止要求を無視する場合のオプションは、別の信号を使用することです。オプションは-9、SIGTERM の代わりに SIGKILL を送信する kill/killall/pkill コマンドです。最初の試行でハンマーを使用したくない場合は、次のようにすることができます

pkill your_programm
sleep 10
pkill -9 your_programm
于 2011-04-08T06:39:49.807 に答える