cpp:vfork:资源暂时不可用

6

我有一个关于C++的奇怪问题。

在编译我的程序时,我遇到了这个错误:

cpp: vfork: 资源暂时不可用

这是在SCO上发生的,但我不确定它是否只与SCO有关,或者可能与所有Linux系统有关。

我查看了几个网站,他们说可能是因为 "基本上g++正在尝试创建(fork)一个新进程,而内核正在拒绝" - Touchtecservers的回答

我在U&L聊天室中问了这个问题,他们建议我在这里问。

编辑

我已经尝试添加:

#define vfork fork

对于源文件,这并没有起作用。


5
通常是好建议,但它似乎与这个问题无关。想必任何代码都会遇到这个问题。 - john
@Claudio 这是私有代码,抱歉。 - Kevdog777
@Claudio 有什么方法可以检查一下吗?内存是2GB(对于这台机器来说足够了)。 - Kevdog777
2
看起来C预处理器在分配新的子进程时出现了问题。也许它试图处理一个太大而无法放入内存的包含树? - πάντα ῥεῖ
3
并不是关于楼主的可执行文件,而是编译过程本身在 vfork() 上失败了,尤其是预处理器。 - πάντα ῥεῖ
显示剩余4条评论
1个回答

9
错误信息来自编译器本身,与您正在编译的程序中的源代码没有直接关系。实际上,由于编译器无法启动cpp进程,您的源代码(可能)尚未被查看。报告cpp作为进程名称略微不寻常;我希望是cc编译驱动程序启动了cpp(因此通常会报告cc:vfork:资源暂时不可用)。
基本上,机器试图做太多事情,没有剩余的资源来分叉一个新进程。如果您正在运行make -j8以执行并行编译,则可以将8减少为4。否则,请查看在机器上还有什么其他事情可以停止。

1
是的,我刚刚查看了所有正在运行的处理器,没有发现可以终止的进程(看起来它们都是必需的)。 - Kevdog777
2
在这种情况下,你有一个问题。是时候升级机器的可用内存了吗?是时候换一台新机器了吗?是时候配置更多的交换空间了吗?是时候在不那么繁忙的另一台机器上编译了吗?并不完全清楚你正在耗尽哪些资源。可能是因为你运行了太多进程。无论如何,“机器太忙”的诊断结果是正确的--只是细节问题。(顺便说一下,我注意到 SCO Unix 根本不是 Linux。它们提供了大致相同的功能,但它们是完全独立的代码库。) - Jonathan Leffler
我将内存从1GB升级到2GB,但仍然遇到了这个问题 - 看起来我被卡住了 :/ 我将尝试终止一个进程(PID),如果它引起问题,我将重启虚拟机。 - Kevdog777
你曾经在虚拟机上编译过C++吗?你正在尝试编译的代码与以前成功编译的代码相比,有什么新的或不寻常的地方吗?例如,是否存在大量的模板元编程,需要编译器在编译时进行计算?虽然这几乎是犯罪行为(我仍然记得30多年前我的机器从1 MiB升级到2 MiB后获得的性能提升 - 是的,兆字节!),但你能否通过增加虚拟机内存来进一步扩大它?还有其他在虚拟机中运行的东西吗?是一个文件引起问题吗? - Jonathan Leffler
你在任何机器上成功编译过那段代码吗?当时你使用的是相同版本的GCC(g++)吗?听起来好像那个文件有点奇怪。你尝试过不进行优化编译吗?你尝试将文件分割开来,以便找出问题所在了吗?你运行过 make -k 命令忽略这个文件的编译失败吗?编译将会继续进行,如果其他文件没有问题,你就只需要专注于解决这一个文件的问题。如果很多文件都有问题……我已经没有简单的解决方案了;我也不确定是否有任何解决方案。 - Jonathan Leffler
显示剩余2条评论

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