Я хочу выполнить передачу большого объема с диска, что снижает скорость отклика моей системы.
Мне нужна команда Unix, которая будет запускать команду только после того, как я простояю у консоли в течение нескольких минут. И если я вернусь на полпути, это приостановит работу. Пока я не уйду от компьютера.
Есть такая команда или программный комплекс?
[изменить: ключевая часть этого вопроса - как определить, есть ли активность консоли, чтобы автоматически приостановить.]
Вы можете добиться этого, сначала получив PID процесса с помощью:
ps aux | grep <process_name>
запишите PID (это второй столбец), затем приостановите его с помощью:
kill -STOP <pid>
и продолжайте:
kill -CONT <pid>
Как насчет того, чтобы просто запустить команду в обычном режиме, а затем использовать для нее "nice", чтобы снизить ее приоритет?
Однажды я написал сценарий "pause_io", который будет принимать число, а затем pgrep всех типов вещей, которые могут повлиять на мой ввод-вывод, например rsync, updatedb и cp. Затем он убьет -STOP эти pid и засыпает на указанное количество минут, а затем убьет -CONT каждый из них. Когда мне требовался оперативный доступ к ящику, я выполнял
pause_io 10 &
И у меня было бы 10 минут без тяжелых операций ввода-вывода
Это было примерно так:
#!/bin/bash
TIMEOUT=$(($1*60))
TASKS="mlocate|updatedb|rsync|cp"
pkill $TASKS -signal STOP
sleep $TIMEOUT
pkill $TASKS -signal CONT
rsync
имеет --bwlimit
вариант.
Может быть, запустить предложенные -STOP и -CONT как часть заставки?
(Если вы используете терминал: есть также экранная заставка для терминалов, но я не знаю ее имени или где установить ее параметры. Все, что я знаю, это то, что она включена по умолчанию в Ubuntu :-)