我在 OS X 10.15.3 上使用 zsh,遇到了一个奇怪的问题,每当我使用 CTRL-C 终止一个进程(比如 Node.JS 应用程序)时,该应用程序就会正常关闭,但终端仍然处于一种奇怪的状态,zsh 仍然在后台运行。
输出为:
^C
Adam@Adams-2020-MacBook-Air server %
如果我尝试关闭窗口,OS X 会提示我:“是否要终止此选项卡中正在运行的进程?关闭此选项卡将终止正在运行的进程 -zsh“
终端看起来好像应用程序已关闭并且没有其他任何运行,但是当我按下键盘的向上或向下键(尝试找到我的最后一个命令)时,终端会将它们输出为字符^[[A^[[B
:
^C
Adam@Adams-2020-MacBook-Air server % ^[[A^[[B
只有在我再次按下 CTRL-C 后,终端才会正确关闭所有进程。
^C
Adam@Adams-2020-MacBook-Air server % ^[[A^[[B^C
Adam@Adams-2020-MacBook-Air server % <-- now keyboard up/down works as expected
使用其他终端和以前版本的 OS X 时,我曾经按一次 CTRL-C 来关闭应用程序进程,然后我可以立即开始输入新命令并使用键盘的向上/向下箭头,而无需再次按 CTRL-C。
问题:
- 为什么会发生这种情况?
- 为什么我用 CTRL-C 停止另一个进程后,“zsh”进程会启动?
- 我该如何阻止这种情况发生?
更多信息
ps lww
处于不良状态时的输出:
ps lww
UID PID PPID CPU PRI NI VSZ RSS WCHAN STAT TT TIME COMMAND
501 1038 1037 0 31 0 4334096 624 - S+ s000 0:00.47 -zsh
501 47069 47068 0 31 0 4334096 1040 - S+ s001 0:00.03 -zsh
501 438 435 0 31 0 4334096 708 - S s008 0:00.07 -zsh
501 16686 438 0 31 0 4634128 17048 - S+ s008 0:07.80 node /Users/Adam/.yarn/bin/yarn.js start
501 16727 16686 0 31 0 4590112 14972 - S+ s008 0:00.23 /Users/Adam/.n/bin/node /Users/Adam/Sites/helloclub/client/node_modules/.bin/run-p serve watch
501 16728 16727 0 31 0 4633296 17468 - S+ s008 0:07.82 /Users/Adam/.n/bin/node /Users/Adam/.yarn/bin/yarn.js run serve
501 16729 16727 0 31 0 4633296 17492 - S+ s008 0:07.81 /Users/Adam/.n/bin/node /Users/Adam/.yarn/bin/yarn.js run watch
501 16730 16729 0 31 0 4984048 113904 - S+ s008 3:56.33 gulp watch
501 16731 16728 0 31 0 4654396 50488 - S+ s008 0:57.83 /Users/Adam/.n/bin/node build/serve.js
501 16732 16731 0 31 0 4379808 4644 - S+ s008 0:00.11 open -W http://localhost:8080
501 450 447 0 31 0 4334096 1512 - S s009 0:00.13 -zsh
yarn
在使用和 组合启动脚本时似乎会发生这种情况nodemon
。单独使用 运行脚本yarn
似乎不会引起任何问题,直接使用 运行脚本也不会引起任何问题nodemon
。不知何故,两者组合在一起会引起问题。
答案1
我在退出终端时遇到了与 -zsh 提示相同的问题,我解决这个问题的一种方法是去.zshrc
并发现module_init
其中添加了,这是在我安装恶意软件后添加的,我编辑了文件并删除了行,module init
因此~/.zshrc
它停止运行进程,如果这是你的问题,请继续删除module init
里面的脚本~/.zsh/misc/module_init
。我知道这不是一个准确的答案,但我无法评论,因为我是新手