sysinfo() 是异步的。信号安全?
Is sysinfo() async. signal safe?
这可能是个愚蠢的问题,但在 Linux (RHEL 7/8) 中是 sysinfo()(从 gcc 'C' 调用)异步。信号安全吗?
也就是说,可以从 'C' 信号处理程序安全地调用它吗?
运行 'man sysinfo' 或 'info sysinfo' 从命令行似乎没有提到任何一种方式。
我正在寻找一种 'fast' 方法来获取经过的时间(来自信号处理程序或 'normal' 上下文)。
Posix ('man signal-safety') 似乎说 clock_gettime() 是信号安全的,尽管我已经看到 glibc 和 Posix 文档并不总是似乎就什么是信号安全什么不是信号安全达成一致。至少对于我正在寻找的地方。
例如,在 https://pubs.opengroup.org/onlinepubs/9699919799/ 'sleep()' 被列为 'Signal concepts' 下的信号安全,其中显示了 POSIX 信号安全功能列表。 (并且也在 RHEL 8.5 的 'man signal-safety' 运行 下)。
但是 'info sleep'(来自 RHEL 8.5)将 sleep() 显示为 'AS-Unsafe'。 (在文档 'The GNU C Library Reference Manual 2.28' 中,我认为它与 glibc 的安装级别相匹配)。
我想我什至不确定在哪里可以找到权威文档(针对此环境)。
sysinfo
只是简单的系统调用包装器和 async-signal-safe:
00000000000feb00 <sysinfo@@GLIBC_2.2.5>:
feb00: mov [=10=]x63,%eax
feb05: syscall
feb07: cmp [=10=]xfffffffffffff001,%rax
feb0d: jae feb10 <sysinfo@@GLIBC_2.2.5+0x10>
feb0f: retq
feb10: mov 0xbf359(%rip),%rcx
feb17: neg %eax
feb19: mov %eax,%fs:(%rcx)
feb1c: or [=10=]xffffffffffffffff,%rax
feb20: retq
但是它没有 vDSO 加速,因此在当前系统上 CLOCK_REALTIME
或 CLOCK_MONOTONIC
会比 clock_gettime
慢得多。
这可能是个愚蠢的问题,但在 Linux (RHEL 7/8) 中是 sysinfo()(从 gcc 'C' 调用)异步。信号安全吗?
也就是说,可以从 'C' 信号处理程序安全地调用它吗?
运行 'man sysinfo' 或 'info sysinfo' 从命令行似乎没有提到任何一种方式。
我正在寻找一种 'fast' 方法来获取经过的时间(来自信号处理程序或 'normal' 上下文)。
Posix ('man signal-safety') 似乎说 clock_gettime() 是信号安全的,尽管我已经看到 glibc 和 Posix 文档并不总是似乎就什么是信号安全什么不是信号安全达成一致。至少对于我正在寻找的地方。
例如,在 https://pubs.opengroup.org/onlinepubs/9699919799/ 'sleep()' 被列为 'Signal concepts' 下的信号安全,其中显示了 POSIX 信号安全功能列表。 (并且也在 RHEL 8.5 的 'man signal-safety' 运行 下)。
但是 'info sleep'(来自 RHEL 8.5)将 sleep() 显示为 'AS-Unsafe'。 (在文档 'The GNU C Library Reference Manual 2.28' 中,我认为它与 glibc 的安装级别相匹配)。
我想我什至不确定在哪里可以找到权威文档(针对此环境)。
sysinfo
只是简单的系统调用包装器和 async-signal-safe:
00000000000feb00 <sysinfo@@GLIBC_2.2.5>:
feb00: mov [=10=]x63,%eax
feb05: syscall
feb07: cmp [=10=]xfffffffffffff001,%rax
feb0d: jae feb10 <sysinfo@@GLIBC_2.2.5+0x10>
feb0f: retq
feb10: mov 0xbf359(%rip),%rcx
feb17: neg %eax
feb19: mov %eax,%fs:(%rcx)
feb1c: or [=10=]xffffffffffffffff,%rax
feb20: retq
但是它没有 vDSO 加速,因此在当前系统上 CLOCK_REALTIME
或 CLOCK_MONOTONIC
会比 clock_gettime
慢得多。