Я делаю что-то похожее на своем домашнем сервере, где мне нужна быстрая и грязная система очередей для квантово-химических вычислений. Ниже приведен фрагмент из моего сценария очередей:
# If second argument passed, treat as PID to check for
# completion before proceeding
if [ -n "$2" ]
then
while [ `ps aux | grep orca | sed -r 's/[a-z0-9]+[ ]+([0-9]+).*/\1/' | grep "^$2\$" | wc -l` -gt 0 ]
do
sleep 1m
done
fi
Команды внутри обратных тиков выполняют следующее:
- Вызовите
ps aux
чтобы получить список процессов
grep
имя исполняемого файла (здесь « orca
») для защиты от редкого случая, когда интересующий процесс выполняется достаточно долго, чтобы использование PID было свернуто, а интересующий PID был назначен несвязанному процессу
sed
каждый оставшийся список процессов, используя расширенный Regex, чтобы оставить только номер PID в каждой строке
grep
чтобы проверить, совпадают ли какие-либо из PID с целевым PID
wc -l
предоставляет простой способ подсчета количества совпадающих PID (счет должен быть только один или ноль, но реализация -gt 0
должна быть устойчивой к необычным обстоятельствам)
Затем сценарий спит в течение одной минуты (легко настраивается) и повторяет проверку PID. В какой-то момент интересующий PID больше не обнаруживается, сценарий продолжается. В моем случае последующие команды выполняют соответствующие вычисления; Вы можете адаптироваться для выполнения любых действий, которые вы хотите.