如何避免主文件夹中制表符完成的挂起?

如何避免主文件夹中制表符完成的挂起?

有时在服务器上,如果磁盘IO负载很重,终端会因为tab补全而卡住。Ctrl-C|D|Z都不要放弃。

每次我必须从另一个会话登录时,找到卡住的 pty 并将其杀死。

有什么办法可以防止选项卡完成挂起吗?

答案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.它还会影响 I/O,并可能导致挂起。

我决定使用/proc/diskstats用于评估磁盘活动。您可以使用另一种方式。极限值是随机选择的。

第二个想法- 设置 I/O 使用限制,例如

相关内容