我在Windows 7上使用setup-x86_64.exe工具(版本2.873)更新了我的cygwin。 我需要安装一些额外的软件包(主要是zip / unzip等)。
从那时起,当我尝试运行Cygwin终端时,我遇到以下错误(快捷方式指向C:\ cygwin64 \ bin \ mintty.exe -i /Cygwin-Terminal.ico - ):
Error: could not fork child process: Resource temporarily unavailable.
DLL rebasing may be required. See 'rebaseall / rebase --help'.
我在网上搜索了如何运行他们在邮件中建议的rebaseall命令。基本上建议是启动cygwin / bin / dash.exe并运行:
bin/rebaseall
我做了几次,我也使用了-v注释,没有错误回来。我仍然无法启动cygwin。
我也尝试过运行cygwin-x / XWin-server没有任何反应。
我查看了cygwin/var/log/setup.log
中的设置日志,我看不到任何错误。
我尝试再运行一些安装程序,重新安装我已经拥有的一些软件包,但这些软件包都没有帮助。 任何想法我怎么能让它工作?
答案 0 :(得分:5)
我的一位同事在从SourceTree(Mingw32)打开终端时遇到了类似的错误,并且在尝试pull
,rebase
等时遇到了错误(任何不是本地的)。他通过卸载Sourcetree解决了这个问题,使用CCleaner清理他的注册表(不确定是否需要),重新启动并再次安装Sourcetree。
我知道这与OP描述的问题略有不同,但是仍然可以通过取消/重新安装和清理注册表来解决这个问题,这也可能有助于未来的人们在Sourcetree问题上找到这个问题(比如我做了。)
修改: 另一位同事也遇到了这个问题,他设法修复它只是重新启动而没有重新安装或使用CCleaner。
答案 1 :(得分:3)
来自https://chromium.googlesource.com/chromium/src/+/master/docs/cygwin_dll_remapping_failure.md
有时,cygwin无法控制的DLL会被映射到cygwin cygwin为其库选择的位置的进程。 这主要见于反病毒DLL。发生这种情况时, 必须在rebase期间指示cygwin以避开该区域 该DLL映射的内存。
有一些背景可供选择 http://www.dont-panic.cc/capi/2007/10/29/git-svn-fails-with-fatal-error-unable-to-remap/
由于unix fork语义(大概),cygwin库必须是 映射到fork的父级和子级中的相同位置。所有 cygwin库中有关于它们应该映射到何处的提示 在进程地址空间;如果遵循这些提示,每个 库将映射到两个地址空间中的相同位置。 但是,Windows非常乐意将DLL映射到任何地方 地址空间;提示不被视为控制。重新映射 当cygwin进程启动时,会出现错误并且其中一个库 无法映射到其提示指定的位置。
/ usr / bin / rebaseall更改了所有cygwin的DLL提示 图书馆,以便没有图书馆间的冲突;它做到了这一点 通过选择连续但不重叠的库布局开始 在一个基地址和工作。这个过程确保有 没有内部的cygwin冲突,但无法应对冲突 cygwin进程地址空间中的外部DLL (例如反病毒DLL)。
要处理这种情况,你需要找出问题所在 非cygwin库,它在地址空间中,并执行 全部重新设置,以便没有cygwin提示将地图库映射到该位置。
ash /usr/bin/rebaseall -b <base address>
(此命令也可以执行
如果要查看DLL布局,请-v
标记。)这应该解决问题。
如果你选择的基地址太低,你最终可能会遇到一个破碎的cygwin 安装。您可以通过再次运行cygwin的setup.exe重新安装它 包选择页面,单击“全部”条目重新安装。你可能不得不这样做 这样做两次,因为你可能会在第一次重新安装过程中遇到错误。
答案 2 :(得分:2)
最近我一直在遭遇类似的问题。我无法确定原因,无论是由于最近的Windows7补丁还是最新的cygwin更新。我处于严格控制的企业环境中,只有有限的提升权限,许多反恶意软件和加密驱动器。我目前正在使用32位Cygwin。
在我安装Git和Git-Svn软件包之后开始出现问题,这些软件包需要Perl并升级其他各种Cygwin软件包。
使用rebase-trigger或rebaseall重新绑定并没有为我解决问题。在尝试执行rebase时,也没有在安装后的pahse中重新安装和设置重复引发的错误。
我的第一个成功是将Perl降级到以前的版本,即。从5.22.2.1降至5.22.1.2。几周后,错误返回,可能是在强制Windows更新和重新启动之后。
我最近的成功是通过忽略dash / rebaseall脚本并直接运行rebase.exe来实现的,如下所示: -
$ cd /bin
$ ls -1 *.dll | egrep -v '(cygwin1|cyglsa).*\.dll' >rebasedlls.txt
cygpath -wa /bin
的Windows目录)。 C:\apps\cygwin\bin> rebase.exe --info cygwin1.dll
/usr/bin/cygwin1.dll base 0x61000000 size 0x00500000
C:\apps\cygwin\bin> rebase -b 0x62000000 -4 -n -v -t -T rebasedlls.txt
到目前为止,非常好,我的Cygwin又回到了工作状态。
答案 3 :(得分:1)
这是修复。
还要从同一文件夹添加这些其他二进制文件:expr.exe,uname.exe,grep.exe,rm.exe
祝你好运,答案 4 :(得分:0)
有一个rebase实用程序可以在设置后阶段触发rebase。
从破折号或bash:
/usr/bin/rebase-trigger full
关闭所有进程并再次运行setup-x86_64.exe。
答案 5 :(得分:0)
卸载它, 并安装32位软件。
答案 6 :(得分:0)
我重新启动了3次,然后一切正常。 wtf Windows 7
答案 7 :(得分:0)
这个完全相同的错误消息有多种原因,虽然与我在这种情况下也看到的一样,但并非都是与setup-x86_64.exe有关。但是,如果rebaseall不能解决您的问题,那么这里的建议可能会起作用。
在我今天早上看到的情况下,原来是由退出薄荷终端仿真器后继续运行的几个进程引起的。我的直觉是这些僵尸进程会阻止控制台被回收。就我而言,这两个过程是通过实验确定的,方法是查看不再需要的杂散过程的运行过程列表。通过查看正在运行的任务列表,我发现阻止我的两个过程。
C:\WINDOWS\system32>tasklist | grep Console
CobraWinLDTP.exe 31844 Console 1 43,600 K
geckodriver.exe 52640 Console 1 32,164 K
C:\WINDOWS\system32>taskkill /F /PID 31844
SUCCESS: The process with PID 31844 has been terminated.
C:\WINDOWS\system32>taskkill /F /PID 52640
SUCCESS: The process with PID 52640 has been terminated.
在其他一些stackoverflow问题上,我看到git通常是导致此症状的僵尸进程(对于某些用户)。不幸的是,关闭控制台会话后仍然存在的任何残留过程都可能导致此问题,因此您必须进行试验。
答案 8 :(得分:0)
似乎一切正常。
注意:如果找不到“ Git for Windows”进程,而仍然要面对相同的进程,则直接终止“ Node.js:服务器端JavaScript”进程
答案 9 :(得分:0)
答案 10 :(得分:0)
如果您已在Windows安全漏洞利用保护中打开Force randomization for images (Mandatory ASLR)
,则可以通过选择Use default (Off)
来解决此问题,将其关闭。
答案 11 :(得分:0)
我遇到此问题的实例还与在 Windows 安全漏洞利用保护设置中打开“图像的强制随机化”有关。
在您将设置更改回默认关闭位置并重置后,您必须以管理员身份运行 Git 才能实现显然需要提升权限的目录更改。
我无法确定一种方法来允许打开该设置并且不会在 Git 上遇到此问题,尽管我尝试了一段时间但没有成功。
关闭可选的安全功能以让单个程序运行对我来说似乎是最后的选择。然而,这也不仅仅是任何程序。