gpt4 book ai didi

linux - 在 chroot execvp() 内部返回 "Argument list too long"

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:14 26 4
gpt4 key购买 nike

我在 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 内部设置了一个更大的值。然而同样的结果...有人有想法吗?我不知道我是否在错误的方向进行调查。非常感谢您的帮助!

最佳答案

I'm having an issue running a massive command inside a chroot.

Does anyone have an idea?

命令行通常与环境变量和堆栈共享空间,无论您如何努力扩展它们,仍然存在限制。

长期的解决方案是避免挑战极限。例如,不是 sh -c "humongous command",而是从 make 文件中将 "humongous command" 写入临时文件,然后运行 ​​sh/tmp/filename 代替。

关于linux - 在 chroot execvp() 内部返回 "Argument list too long",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952366/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com