синхронизация сценария оболочки с операциями ядра - PullRequest
2 голосов
/ 07 апреля 2011

Для остановки активности в моей встроенной системе 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 (что лениво, поскольку по какой-то причине он отказывается отключаться в противном случае). Знаете ли вы, как я могу дождаться завершения всех трех операций перед завершением сценария? Использование произвольного sleep не выглядит хорошим решением.

Также, любой намек на то, почему я не могу umount без -l?

Ответы [ 2 ]

0 голосов
/ 08 апреля 2011

Как уже упоминалось другими, вы должны и только -l, когда процесс завершается.Опция, если она занимает много времени / она просто игнорирует ваш вежливый запрос на остановку, использует другой сигнал.Параметр будет -9 для команды kill / killall / pkill, чтобы отправить SIGKILL вместо SIGTERM.Если вы не хотите использовать молоток с первой попытки, вы можете сделать что-то вроде

pkill your_programm
sleep 10
pkill -9 your_programm
0 голосов
/ 07 апреля 2011

Вам нужно дождаться завершения уничтоженного процесса.Согласно вашему комментарию ...

wait <pid>

... не работает!Таким образом, можно выполнить цикл ala:

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

, чтобы дождаться завершения остановленного процесса перед выполнением операций swapoff и umount.

...