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에 대한 원시 인터페이스입니다. 문서가 부정확합니다(또는 구식이라고 말합니다).

또한 리소스 제한/계산 및 해당 단위는 시스템마다 다르며 일부 시스템에서 쉘 버그가 발생하는(문서화되지 않은) 것을 찾는 것은 드문 일이 아닙니다. 일부 셸에서는 이를 수용하거나 BSD csh의 원래 구현과 호환되도록 추가 확장을 수행하지만 이에 관계없이 지원되는 KMGTPE 접미사는 항상 1000이 아닌 1024를 기반으로 합니다.

내가 가지고 있는 게 생각나네제안된 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를 제외한 %M모든 시스템에서 zsh 키워드의 단위가 잘못되었습니다.time.

독립형 GNU time유틸리티(많은 쉘에는 자체 time키워드가 있음)Darwin/macOS와 다른 시스템 간의 다양한 단위 이해.

관련 정보