Ответ fche — очень хорошая подсказка, спасибо за это, хотя на самом деле это не решает проблему, потому что вопрос заключался в том, чтобы ограничить процесс определенной пропускной способностью.
Я бы предложил что-то вроде этого:
systemd-run -p "IOWriteBandwidthMax=/dev/sdX 1M" updatedb
или устаревшая версия:
systemd-run -p "BlockIOWriteBandwidth=/dev/sdX 1M" updatedb
Тем не менее, это не подходит к вопросу, потому что его нельзя использовать для уже запущенного процесса, но, возможно, это полезно в некоторых других случаях.
Ссылки:
Поскольку скорости сети не являются целыми числами, нам необходимо использовать другие инструменты, такие как awk, для обработки чисел. Попробуйте:
ifstat -ni wlp7s0 | awk 'NR>2{if ($1+0<100 && $2+0<100) print "Network is slow."; else print "Network is fast."}'
Или, для тех, кто любит, чтобы их команды располагались на нескольких строках:
ifstat -ni wlp7s0 | awk '
NR>2{
if ($1+0<100 && $2+0<100)
print "Network is slow."
else
print "Network is fast."
}'
Параметр -n
добавлен к ifstat
для подавления периодического повторения строк заголовка.
NR>2{...}
указывает awk обрабатывать команды в фигурных скобках, только если номер строки NR
больше двух. Это приводит к пропуску строк заголовка.
if ($1+0<100 && $2+0<100)
проверяет, меньше ли первое поле $
и второе поле $2
100. Если да, то выполняется print "Network is slow."
. Если нет, то выполняется print "Network is fast."
.
John1024 прав насчет чисел с плавающей запятой, но мы можем просто обрезать числа. С простым башом:
n=0
LC_NUMERIC=C ifstat -i $interface \
| while read -r in out; do
((++n < 2)) && continue # skip the header
if (( ${in%.*} < 100 && ${out%.*} < 100 )); then
echo Network is slow.
else
echo Network is fast.
fi
done