我是否正确地假设ulimit -c 0
将核心文件创建的最大大小设置为无限制(不受约束、无限制)的值?
我尝试过的 Linux 发行版 Bash(Rocky Linux 8.10、9.5、Ubuntu)中,甚至在 macOS 中运行的 Bash 5.2.37 中,都提到了ulimit -c unlimited
但没有提到 0 或“无限”。在 macOS 上的 zsh 5.9 下,提到了和,但没有提到 0。help ulimit
run-help ulimit
unlimited
hard
我是否正确地假设ulimit -c 0
将核心文件创建的最大大小设置为无限制(不受约束、无限制)的值?
我尝试过的 Linux 发行版 Bash(Rocky Linux 8.10、9.5、Ubuntu)中,甚至在 macOS 中运行的 Bash 5.2.37 中,都提到了ulimit -c unlimited
但没有提到 0 或“无限”。在 macOS 上的 zsh 5.9 下,提到了和,但没有提到 0。help ulimit
run-help ulimit
unlimited
hard
不
0
和 不一样unlimited
。(
ulimit
à la sh) /limit
(à la csh) 内置命令zsh
是系统调用的接口setrlimit()
。man 2 setrlimit
在 Debian 系统上(系统调用手册页来自https://www.kernel.org/doc/man-pages/ ,就像大多数基于 Linux 的操作系统一样;请参阅那里获取最新版本的手册setrlimit()
页),结果如下:macos 手册页没有提到这种特殊情况,表明当限制设置为 0 时,它可能会创建大小为 0 的核心文件,尽管这似乎不太可能,特别是考虑到POSIX 规定(此处为 2024 版):
并且 macos 已经通过了 POSIX 兼容认证。
在 1980 年 4BSD 中最初的资源限制实现中,如果核心文件的大小大于限制,则根本不会创建核心文件,并且至少在 FreeBSD 中现在看起来情况仍然如此,并且其手册页
RLIMIT_CORE
中的措辞与 macos 的相同,因此 macos 的行为可能相同,这似乎使其不符合 POSIX 标准(尽管请注意,生成这样的文件可能是实现定义的异常终止操作之一,这可能会给出很大的回旋余地)。无论如何
0
并不意味着无限。对于setrlimit()
,无限是用RLIM_INFINITY
常数指定的。