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

abu*_*kaj 3 linux memory resources time ulimit

man time

M      Maximum resident set size of the process during its lifetime, in Kilobytes.
Run Code Online (Sandbox Code Playgroud)

ulimit -a

max memory size         (kbytes, -m) unlimited
Run Code Online (Sandbox Code Playgroud)

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

Sté*_*las 7

它是千字节 (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)"},
Run Code Online (Sandbox Code Playgroud)

对于 RSS 限制。

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

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