Comando Unix para suspender um trabalho enquanto houver atividade do console?

5

Eu quero fazer uma grande transferência de disco, o que diminui a capacidade de resposta do meu sistema.

O que eu quero é um comando Unix que só irá executar o comando depois de ficar ocioso no console por alguns minutos. E se eu voltar no meio do caminho, ele suspenderá o trabalho. Até eu sair do meu computador.

Existe tal comando ou pacote de software?

[edit: A parte principal desta questão é como determinar se existe atividade na consola , para automaticamente suspender.]

    
por Joseph Turian 16.03.2010 / 18:40

5 respostas

4

Você pode conseguir isso primeiro obtendo o PID do processo com:

ps aux | grep <process_name>

anote o PID (é a segunda coluna) e, em seguida, suspenda-o com:

kill -STOP <pid>

e continue com:

kill -CONT <pid>
    
por 16.03.2010 / 18:45
2

Que tal simplesmente executar o comando normalmente e depois usar "legal" nele para diminuir sua prioridade?

    
por 16.03.2010 / 18:44
2

Uma vez eu escrevi um script "pause_io" que aceitava um número e depois o pgrep tipos de coisas que são susceptíveis de whomp meu IO, por exemplo rsync, updatedb e cp. Em seguida, ele mataria -STOP esses pids e dormir para o número fornecido de minutos e depois matar -CONT cada um deles. Quando precisei de acesso ágil ao caixa que eu executaria

    pause_io 10 &

E eu teria 10 minutos sem I / O pesado

Foi algo assim:

    #!/bin/bash

    TIMEOUT=$(($1*60))
    TASKS="mlocate|updatedb|rsync|cp"

    pkill $TASKS -signal STOP
    sleep $TIMEOUT
    pkill $TASKS -signal CONT
    
por 16.03.2010 / 19:58
0

rsync tem uma opção --bwlimit .

    
por 16.03.2010 / 19:16
0

Execute o sugerido -STOP e -CONT como parte de algum protetor de tela, talvez?

(Se você estiver em um terminal: há também um protetor de tela para terminais, mas eu não sei seu nome ou onde definir suas opções. Tudo o que sei é que ele está ativado por padrão no Ubuntu: -)

    
por 16.03.2010 / 20:46