Como evitar o bloqueio da conclusão da tabulação na pasta home?

2

Às vezes, no servidor, se o carregamento do disco IO for pesado, o terminal ficará preso pela conclusão da tabulação. Ctrl-C|D|Z nem todos desistem.

Toda vez que eu tiver que fazer o login de outra sessão, encontre o arquivo preso e o mate.

Existe alguma maneira de impedir a conclusão da tabulação?

    
por Lee 17.07.2017 / 02:21

1 resposta

1

Primeira ideia - desativa as conclusões do nome do ficheiro, enquanto o disco é carregado de forma elevada. Isso afeta apenas os nomes de arquivos, e outras conclusões continuam funcionando. Porque eu acho que eles não causam problemas.

Crie o arquivo .bash_completion no diretório inicial e coloque este código lá.

#!/bin/bash

### We are needed redefine original _filedir function
### and add new functionality to it
#
# for this, output the original function code and add the word 'original'
# in the beginning of it - now we are have _filedir renamed to
# 'original_filedir'
eval "original$(declare -f _filedir)"

# Define our own _filedir function, which will check disk load
# and: 
# if load are low - call original function.
# if load are high - stop further execution. 
_filedir() {
    io_load_limit=10
    io_load=$(awk '/sda /{print $12}' /proc/diskstats)
    if ((io_load > io_load_limit)); then
        echo -n "completion disabled - a lot i/o"
        return
    fi  

    original_filedir
}

Além disso, o mesmo truque pode ser feito com a função _completion-loader . Configura o carregamento de conclusão dinâmica.

No Ubuntu, o código de conclusão principal reside no arquivo /usr/share/bash-completion/bash_completion e outros, personalizados para um programa específico, residem no diretório /usr/share/bash-completion/completions/ .

Quando bash for iniciado, ele lerá /usr/share/bash-completion/bash_completion file e, em seguida, se você digitar apt-get , por exemplo, _completion-loader executará e carregará apt-get regras de conclusão do /usr/share/bash-completion/completions/apt-get . Isso também afeta a E / S e pode ser causa de interrupção.

Eu decidi usar / proc / diskstats para avaliar a atividade do disco. Você pode usar outro caminho. O valor limite foi escolhido aleatoriamente.

Segunda ideia - limite de configuração para uso de E / S, como esta .

    
por 18.07.2017 / 01:24