我在windows中使用git bash运行一些nodejs脚本但是每当我使用它并退出git bash时会自动将该进程转移到后台并且不允许我使用该端口,除非我使用命令杀死该端口。
但是当我使用cmd时,它运行得很完美,并且进程不能在后台运行,并且无需为了解决原因而无需终止在端口上运行的进程?
答案 0 :(得分:2)
vscode issue 24452中也会报告node-pty issue 7。
两者都引用git-for-windows/git issue 227
官方维护者Johannes Schindelin (dscho)提到3个月前(2017年6月):
唉,事实并非如此。在v2.13.1中,我更改了Ctrl + C的工作方式,此票证中描述的问题仍然存在。非常感谢任何帮助。
问题来自cygwin / msys应用程序中Ctrl + C处理的不同实现 在大多数情况下,POSIX应用程序已准备好处理“signals”,但通常会忽略console events。
2018年4月更新,Johanes just added:
使用我的#1491修补程序对其进行测试后(很快会点击https://wingit.blob.core.windows.net/files/index.html,这样您就可以验证我的声明了,如果您对这个问题感兴趣,那么它应该会出现在那里)不再是一个冻结(虽然如果你按 Ctrl + C 吨的话,会有相当多的延迟。)
请参阅git-for-windows/MSYS2-packages commit f4fda0f:
msys2-runtime
:revamp Ctrl + C 再次处理这件事再次......
背景:当你在Linux或macOS上点击 Ctrl + C 时,信号(SIGINT)是 发送到前台进程及其子进程。这个信号可以 通过为此特定信号安装信号处理程序来拦截 在Windows上,此系统没有精确的等效项。
相反, Ctrl + C 由当前的ConHost翻译(即 运行控制台进程的容器)到
ConsoleCtrl
事件 发送到附加到该控制台的所有进程。如果有的话 进程通过SetConsoleCtrlHandler()
安装了一个处理程序,他们可以 拦截该事件(并避免退出或进行一些清理工作)。在Linux和macOS(以及每种Unix风格)上,进程也可以 通过
kill
可执行文件被杀死,它只是发送一个信号 这个过程,通常是SIGTERM。进程可以截取该信号, 太。强制进程终止,而不给他们任何机会 防止这种情况,可以发送SIGKILL 没有SIGTERM的等价物 视窗。要在Windows上模拟SIGKILL,可以使用TerminateProcess()
, 但它只会杀死一个进程(不像SIGKILL,它也被发送到 儿童过程)。在Git for Windows中,我们努力模仿SIGINT,SIGTERM和 SIGKILL的处理基本上是从开始端口的努力开始的 Git to Windows。
评论的其余部分描述了原始尝试和新尝试。
这可能会进入Git 2.18(2018年第二季度)。