Unix команда, чтобы приостановить работу, когда есть консольная активность?
Я хочу сделать большую передачу диска, которая замедляет отзывчивость моей системы.
Что мне нужно, так это команда Unix, которая будет запускать команду только после того, как я простаиваю в консоли в течение нескольких минут. И если я вернусь на полпути, это приостановит работу. Пока я не уйду от компьютера.
Есть ли такая команда или программный пакет?
[править: Ключевой частью этого вопроса является то, как определить, есть ли действия консоли, чтобы автоматически приостановить.]
5 ответов
Вы можете добиться этого, сначала получив PID процесса с помощью:
ps aux | grep <process_name>
запишите PID (это второй столбец), затем приостановите его:
kill -STOP <pid>
и продолжить это с:
kill -CONT <pid>
Как насчет обычного запуска команды, а затем использования "nice" для понижения ее приоритета?
Однажды я написал сценарий "pause_io", который будет принимать число, а затем pgrep все типы вещей, которые могут повлиять на мой ввод-вывод, например, rsync, updatedb и cp. Затем он убил бы -STOP эти pids и поспал в течение указанного количества минут, а затем убил -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
Запустите предложенные -STOP и -CONT как часть некоторой заставки, может быть?
(Если вы находитесь на терминале: есть также заставка для терминалов, но я не знаю его имени или места для установки его параметров. Все, что я знаю, это то, что он включен по умолчанию в Ubuntu:-)