360安全卫士进程防护导致git-bash系列启动和回车非常慢

解决方法

打开360安全卫士->电脑体检->左下角防护中心->6层系统防护查看->进程防护”关闭”

故障现象

用任何方式开启git-bash都需要等待1秒gitb-bash的黑框才出现, 并且需要等待大约5秒bash的输入界面才出现.

同时使用Cygwin和MinGw测试后结果一样.

其它解决方案

在Windows 7 到x64,git/bash极其缓慢

有趣的是, 在上面这个链接里的其中一条解决方案可以改善(仅改善, 并未完全解决)这个卡顿问题
那就是修改git-bash的profile文件部分

  1. 进入git安装目录的etc目录中
  2. 找到profile文件
  3. 在最后加入以下代码
1
export PS1='$'

这种方法会导致bash里没有任何有好提示, 比如路径提示, 机器名, 用户名提示.

而且这个办法不会解决启动git-bash慢的问题, 仅仅解决启动git-bash后每次按回车的反应比较快.

其实跟踪分析后, 可以把表面导致慢的原因定位在以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
for postinst in $(export LC_COLLATE=C; echo /etc/post-install/*.post); do
[ -e "${postinst}" ] && . "${postinst}"
done

if [ ! "x${BASH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
# 此处是表面导致启动卡顿的原因
profile_d sh
[ -f "/etc/bash.bashrc" ] && . "/etc/bash.bashrc"
elif [ ! "x${KSH_VERSION}" = "x" ]; then
typeset -l HOSTNAME="$(/usr/bin/hostname)"
# 此处是表面导致启动卡顿的原因
profile_d sh
PS1=$(print '\033]0;${PWD}\n\033[32m${USER}@${HOSTNAME} \033[33m${PWD/${HOME}/~}\033[0m\n$ ')
elif [ ! "x${ZSH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
# 此处是表面导致启动卡顿的原因
profile_d sh
profile_d zsh
PS1='(%[email protected]%m)[%h] %~ %% '
elif [ ! "x${POSH_VERSION}" = "x" ]; then
HOSTNAME="$(/usr/bin/hostname)"
PS1="$ "
else
HOSTNAME="$(/usr/bin/hostname)"
profile_d sh
PS1="$ "
fi

也就是说360安全卫士的进程保护功能会对启动sh.exe这个操作做拦截并进行行为分析,

然后干扰到git-bash的正常启动速度.

为了证实这个猜测, 可以直接去双击启动git-bash的以下路径

bin\sh.exe

可以看到弹出黑框并显示输入界面的速度非常慢.

然后安装上面的方法禁止360安全卫士的进程保护后, 再双击运行”bin\sh.exe”将会变的很快.

环境信息

360安全卫士版本: 11.5.0.1004
系统版本: Windows 10
git版本: 2.16.2.windows.1

显示 Gitment 评论