Cygwin错误:“-bash:fork:重试:资源暂时不可用”

68

我最近重新安装了Cygwin,以便获取一些我缺少的命令行元素。我以前从未在Cygwin上遇到过困难,但在这次重新安装后,一个错误消息会在输入每个命令后(几乎)都出现。例如:

-bash-4.1$ wc m1.txt
      3 [main] bash 2216 child_info_fork::abort: data segment start: parent(0x26D000) !=     child(0x38D000)
-bash: fork: retry: Resource temporarily unavailable
2013930  4027950 74968256 m1.txt

通常情况下,命令仍然运行(如上所示),但并非总是如此。偶尔会连续出现“错误”消息(初始数字 “3” 然后会变成“4”或“2”,特别是如果我启动第二个Cygwin窗口。

此外,一旦我启动Cygwin,我会在提示符之前收到以下消息:

      3 [main] bash 6140 child_info_fork::abort: data segment start: parent(0x26D000)     != child(0x36D000)
-bash: fork: retry: Resource temporarily unavailable
-bash: fork: Resource temporarily unavailable
-bash-4.1$

目前,我正在考虑是再次卸载/重新安装Cygwin还是只是忍受错误信息,但我很好奇是否存在我不知道的问题。


2
我在这里找到了一些类似的问题:http://www.mail-archive.com/cygwin@cygwin.com/msg120549.html 你有安装任何防护软件/杀毒软件吗? 如果有,你是否尝试过禁用它进行测试,甚至卸载它(请参见链接)。 还可以查看这里:http://cygwin.wikia.com/wiki/Rebaseall 和 http://superuser.com/questions/231590/running-rebaseall-on-cygwin - rkosegi
13个回答

121

(假设Cygwin已安装在C:\Cygwin中):

  1. 打开任务管理器并关闭任何看起来与Cygwin相关的进程。
  2. 在Windows资源管理器中打开 C:\Cygwin\bin 目录
  3. 检查该目录下是否存在 dash.exe、ash.exe、rebase.exe 和 rebaseall 程序
    • 如果缺少其中任何一个,请重新运行 Cygwin 安装程序并选择 dash、ash 和 rebase 包
  4. 右键单击 C:\Cygwin 文件夹,取消勾选“只读”(如果已经勾选),然后点击 确定。
    • 当出现关于无法切换某些文件的错误时,请选择“全部忽略”。等待此过程完成。
  5. 在Windows资源管理器中浏览到 C:\Cygwin\bin 目录
  6. 右键单击 dash.exe,选择“以管理员身份运行”。一个命令提示符窗口应该出现,上面只有一个 $
  7. 输入 /usr/bin/rebaseall -v,按回车键,并等待该进程完成。
    • 如果遇到有关正在运行Cygwin进程的错误,请尝试重新进行步骤1。如果仍然无法解决问题,请将计算机重新启动到安全模式,然后再尝试这些步骤。
    • 一位评论者指出,根据您的设置,您可能需要键入 cd /usr/bin && ./rebaseall -v
  8. 尝试再次打开Cygwin。

这个过程对我有效,希望对你们也有效。

来源: http://cygwin.wikia.com/wiki/Rebaseall


4
好的。在第七步中,由于路径问题,我需要先进入目录:cd /usr/bin,然后运行 ./rebaseall -v - jjmontes
1
在运行rebaseall时,它仍然显示相同的fork错误。 - Sujoy
如果您遇到有关Cygwin进程正在运行的错误,可以使用Windows的cdmpowershell转到C:\ Cygwin \ bin,然后运行bash.exe /usr/bin/rebaseall -v。它将启动bash.exe,然后执行该命令而不会打开另一个终端。 - Kruupös
当以管理员身份运行cygwin时,遇到了这个问题。上面的“步骤4”解决了它。 - Aelian

13

我希望向上面的回答中添加以下内容,因为这是我在重新安装Cygwin后必须要做的:

导航到 "/usr/bin" 目录(通常为 C:\cygwin\bin)并右键点击文件:dash.exe,选择“以管理员身份运行”。 然后,在 $ 提示符下输入以下内容,每输入一行按回车键:

cd /usr/bin/
/usr/bin/peflags * -d 1
/usr/bin/rebaseall -v

它的作用是将dll标记为“可重定位”,然后对其进行重新定位。除了前面提到的文件(在之前的答案中)外,还需要安装peflags.exe。这样做后,您可能需要重新启动Windows,并确保没有属于cygwin的进程或服务正在运行。 (使用任务管理器终止任何相关进程,然后在服务选项卡下查找以CYG开头的任何服务并停止它。)

这样做后,我能够让cygwin运行而没有关于dll加载到错误地址(如fork错误等)的任何错误。

希望这能对其他人有所帮助,因为我很难找到这个解决方法。

SOURCE: http://www.cygwin.com/faq.html#faq.using.fixing-fork-failures 
and the rebase README file.

我无法运行任何命令,所以对我来说这行不通。无论我尝试执行哪个可执行文件,我总是得到同样的错误。 - Sebi2020
@Sebi2020 那么你的环境出了问题。重新安装Cygwin。第一个线索是你无法运行任何命令,这意味着你要么不在环境中,要么命令可执行文件的权限不正确。你尝试过使用“chmod”使它们可执行吗?(通常,在/usr/bin/目录下运行chmod +x [filename]。) - CherryCoke

5

除了其他答案所提到的,我们也遇到了同样的问题,但不能从ash或dash shell运行rebase命令。然而,当从Windows cmd shell启动该命令时,下面的命令有效。

cmd /c "C:\cygwin64\bin\ash.exe /usr/rebaseall -v"

使用-v可以获取详细输出。


对我来说,它是/bin/rebaseall。 - Konrad

3

我通过重新启动计算机解决了这个问题。可能是因为安装了驱动程序更新,而一直使用睡眠而不是关机。


我正在使用Babun,已经遇到了两次问题,并按照接受的答案进行了操作,但是没有任何改变。而且两次都有一个等待重新启动以应用更新的Windows更新。重新启动我的电脑解决了这个问题。 - cnu

3
我在这里找到了另一份信息: http://cygwin.com/ml/cygwin/2014-02/msg00531.html 你需要删除位于/etc/rebase.db*的数据库,并在“ash”窗口中执行以下操作: peflags * -d 1 rebaseall 对于我来说,在2个服务器上都行得通。

1

当使用cygiconv-2.dll加载Cygwin时,在Cygwin终端中分叉就无法成功加载,但在关闭我的杀毒软件(具体是Ad-aware)后,问题得以解决,Cygwin正常工作。


0

我在Win10上遇到了错误,尝试在安装之前将其重定位到C:。 然后我发现安装程序实际上是安装到了c:/Users/myuser 所以我把所有文件从c:/Users/myuser复制到了c:.badun 然后重新启动并打开badun.bat

不确定这是否明智,现在它是重复的XD...但是它又可以工作了。


0

这个问题是间歇性出现的。当连接到 AWS 上的远程机器的网络速度过慢时,我发现了这个问题。我有一个 Shell 脚本通过 Gitbash shell 运行,并通过 ssh 连接到 AWS EC2 实例。大部分时间它都能正常运行,但有 100 次中有 2 次会出现 bash: fork: retry: Resource temporarily unavailable 的问题。从任务管理器中杀掉 MSYS2 终端可帮助解决此问题...负面的一面是需要从头开始运行脚本...


0

Rebase操作在我的情况下没有帮助。除了其他人建议的方法外,我注意到缩短PATH环境变量的长度可以解决我的问题(从this答案中也可以看出,这对其他人也有帮助)。


0

我在Windows 10和使用cygwin的mobaxterm应用程序上遇到了同样的问题,尝试了这里列出的所有答案,但对我来说,解决方案就是简单地删除"CryptoPro CSP"应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接