time 和 ulimit 命令使用的千字节是 1000 (SI) 还是 1024(老式)字节?

time 和 ulimit 命令使用的千字节是 1000 (SI) 还是 1024(老式)字节?

man time

M      Maximum resident set size of the process during its lifetime, in Kilobytes.

ulimit -a

max memory size         (kbytes, -m) unlimited

但一个“千字节”可能表示 1000 或 1024 字节。我猜这是一轮 1024,但我想确定一下。权威参考将不胜感激。

答案1

它是千字节 (1024),这些是getrusage()/ setrlimit()API 的原始接口。这些文档不准确(或者如您所说的老派)。

另请注意,资源限制/核算及其单位因系统而异,您会发现 shell 在某些系统上出错的情况并不少见(不按记录的方式运行)。您会发现某些 shell 进行了一些额外的缩放,以适应这种情况或与 BSD csh 中的原始实现兼容,但无论如何,支持的 KMGTPE 后缀始终基于 1024,而不是基于 1000。

它让我想起我有一个建议的 zsh 补丁涵盖这一点以及我需要完成的更多内容。

你会看到的那里的代码明确说明每种资源的单位。

typedef struct resinfo_T {
    int res;            /* RLIMIT_XXX */
    char* name;         /* used by limit builtin */
    enum zlimtype type;
    int unit;           /* 1, 512, or 1024 */
    char opt;           /* option character */
    char* descr;        /* used by ulimit builtin */
} resinfo_T;
[...]
    {RLIMIT_RSS, "resident", ZLIMTYPE_MEMORY, 1024,
        'm', "resident set size (kbytes)"},

对于 RSS 限制。

还要注意除 Darwin/macos 之外,%Mzsh 关键字的单位在所有系统上都是错误的time

独立的 GNUtime实用程序(许多 shell 有自己的time关键字),了解 Darwin/macOS 和其他系统之间的不同单位

相关内容