为什么在Windows中安装的git bash在后台运行脚本?

时间:2017-10-01 11:44:39

标签: windows git bash

我在windows中使用git bash运行一些nodejs脚本但是每当我使用它并退出git bash时会自动将该进程转移到后台并且不允许我使用该端口,除非我使用命令杀死该端口。

但是当我使用cmd时,它运行得很完美,并且进程不能在后台运行,并且无需为了解决原因而无需终止在端口上运行的进程?

1 个答案:

答案 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的工作方式,此票证中描述的问题仍然存在。

     

非常感谢任何帮助。

ConEmu/issue 402包括:

  

问题来自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年第二季度)。