【发布时间】:2016-06-21 18:50:54
【问题描述】:
我在 chroot 中运行大量命令时遇到问题。命令本身是由 Makefile 触发的,因此错误是经典的:
make: execvp: /bin/sh: Argument list too long
我确实进行了调查,并且了解了查看 make 的源代码,它通过 libc 提供的 execvp() 创建了一个作业(我已经看到该命令作为“/bin/sh”“-c”“传递。 ..我的论点”)。 所以我查看了 libc 源代码,基本上它看起来有一个由 ARG_MAX 定义的限制,但是最近它没有像代码所说的那样使用:
/* Legacy value of ARG_MAX. The macro is now not defined since the
actual value varies based on the stack size. */
#define legacy_ARG_MAX 131072
所以它认为我需要通过以下方式更改堆栈大小:
ulimit -s VALUE
所以我比较了 chroot 之外的值,我确实在 chroot 内部设置了一个更大的值。然而同样的结果... 有人有想法吗?我不知道我的调查方向是否错误。 非常感谢您的帮助!
【问题讨论】:
-
我不知道是不是这样,因为这可能与它在 chroot 内部失败的事实有关,并且感觉它可能与它有关,因为肯定有限制它,但我不知道是什么......
标签: linux makefile libc chroot execvp