为什么使用 CTRL-C 退出进程后 ZSH 会继续运行,直到再次按下 CTRL-C?

为什么使用 CTRL-C 退出进程后 ZSH 会继续运行,直到再次按下 CTRL-C?

我在 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。

问题:

  1. 为什么会发生这种情况?
  2. 为什么我用 CTRL-C 停止另一个进程后,“zsh”进程会启动?
  3. 我该如何阻止这种情况发生?

更多信息

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。我知道这不是一个准确的答案,但我无法评论,因为我是新手

相关内容