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

rsync имеет --bwlimit вариант.

Запустите предложенные -STOP и -CONT как часть некоторой заставки, может быть?

(Если вы находитесь на терминале: есть также заставка для терминалов, но я не знаю его имени или места для установки его параметров. Все, что я знаю, это то, что он включен по умолчанию в Ubuntu:-)

Другие вопросы по тегам