Назад | Перейти на главную страницу

Команда Unix для приостановки работы во время активности консоли?

Я хочу выполнить передачу большого объема с диска, что снижает скорость отклика моей системы.

Мне нужна команда 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 :-)