Как избежать зависания при завершении табуляции в домашней папке?

Он будет потерян навсегда , если вы не используете - повторные попытки , и в этом случае он будет повторен на другом сервер. Также посмотрите - filter-hosts , чтобы удалить неработающие хосты.

2
17.07.2017, 03:28
1 ответ

Первая идея-отключить автозавершение имени файла, когда диск сильно загружен. Это влияет только на имена файлов, остальные дополнения продолжают работать. Потому что, я думаю, они не вызывают зависания.

Создайте файл .bash_completionв домашнем каталоге и поместите туда этот код.

#!/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
}

Аналогичный трюк можно проделать и с функцией _completion-loader. Он устанавливает динамическую загрузку завершения.

В Ubuntu основной код завершения находится в файле /usr/share/bash-completion/bash_completion, а другие, настроенные для конкретной программы, находятся в каталоге /usr/share/bash-completion/completions/.

Когда запускается bash, он читает файл /usr/share/bash-completion/bash_completion, а затем, если вы набираете apt-get, например, _completion-loaderзапускается и загружает apt-getправила завершения из /usr/share/bash-completion/completions/apt-get. Это также влияет на ввод-вывод и может быть причиной зависания.

Я решил использовать /proc/diskstats для оценки активности диска. Вы можете использовать другой способ. Предельное значение было выбрано случайно.

Вторая идея-установить ограничение на использование ввода-вывода, например это .

1
27.01.2020, 22:18

Теги

Похожие вопросы