У меня есть этот bash-скрипт:
#!/bin/bash
if [ "$#" -eq 4 ]
then
rep_origine="$1"
rep_dest="$2"
temps_exec="$3"
temps_refr="$4"
else
echo "Usage: $0 [files directory] [destination directory] [execution time$
exit 2
fi
cp -R "$rep_origine" "$rep_dest" &
cp_process="$!"
while [ "$cp_process" -eq "$!" ]
do
cp_process="$!"
sleep "$temps_exec"; kill -STOP "$cp_process"
sleep "$temps_refr"; kill -CONT "$cp_process"
done
Я хотел бы, чтобы мой цикл заканчивался, когда заканчивается команда cp. Поэтому я поставил, что когда последний PID не совпадал с PID cp, цикл должен завершаться, но он не работает.
Я не понимаю, как указать, что цикл должен заканчиваться, когда заканчивается команда cp.
Решение проблемы
Я бы использовал kill
сигнал без вреда, 0
чтобы проверить, жив ли процесс:
while kill -0 $cp_process 2>/dev/null
do
# work indicator:
echo -n '.'
sleep 1
done
Если цель состоит в том, чтобы временно остановить процесс в цикле:
while kill -STOP $cp_process 2>/dev/null
do
# do work while the process is stopped here
kill -CONT $cp_process
# give the process execution time:
sleep $temps_exec
done
Комментариев нет:
Отправить комментарий