Первая идея-отключить автозавершение имени файла, когда диск сильно загружен. Это влияет только на имена файлов, остальные дополнения продолжают работать. Потому что, я думаю, они не вызывают зависания.
Создайте файл .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 для оценки активности диска. Вы можете использовать другой способ. Предельное значение было выбрано случайно.
Вторая идея-установить ограничение на использование ввода-вывода, например это .
Обычно в CentOS/Fedora/RHEL я устанавливаю его так:
yum install lsof
dnf install lsof
Тогда я смогу его использовать. Поэтому сначала попробуйте установить его.
Насколько я понимаю ваш вопрос, я полагаю, что вы используете WSL в Windows 10, чтобы установить lsof, вам нужно выполнить следующую команду npm install lsof
, поскольку на вашем компьютере установлен npm, или использовать традиционный способ его установки sudo apt install lsof
из терминала Ubuntu\Debian. что касается другой части, после установки lsof вы можете использовать lsof -D /mypath
, а затем убить процесс, который использует любой файл в этом каталоге.
Примечание :Если вы используете suse, вы можете использовать следующие команды
sudo zypper ref
sudo zypper up
sudo zypper install lsof
отредактируйте приведенную выше команду, она также работает в автономном Ubuntu\Debian или Suse
Проверьте эту ветку :[WSL] Невозможно запустить /usr/bin/gdb при установке bash.exe в качестве интегрированной оболочки в VS Code В частности, часть json может решить вашу проблему, я полагаю.