这可能是一个愚蠢的问题,但在Linux (RHEL 7/8)中是sysinfo() (来自gcc 'C')异步。信号安全?
也就是说,可以安全地从C信号处理程序调用它吗?
从命令行运行‘’或'info sysinfo‘似乎没有提到任何一种方式。
我正在寻找一种“快速”的方法来获得经过的时间(从信号处理程序或“正常”上下文)。
Posix ('man信号-安全‘)似乎说clock_gettime()是信号安全的,尽管我已经看到glibc和Posix文档在什么是信号安全和什么不是信号安全上并不总是一致的。至少我在找的地方。
例如,在https://pubs.opengroup.org/onlinepubs/9699919799/中,在“信号概念”下,‘list ()’被列为信号安全,其中显示了一个POSIX信号安全函数列表。(也在从RHEL8.5运行的“man信号-安全”下)。
但是“信息睡眠”(来自RHEL8.5)显示睡眠()是“不安全的”。(我认为,在“GNU C库参考手册2.28”文件中,GNU库参考手册与glibc的安装级别相匹配)。
我想我也不确定最终的文档应该在哪里找到(对于这个环境)。
发布于 2022-02-16 19:11:28
sysinfo只是瘦系统调用包装器和异步信号安全:
00000000000feb00 <sysinfo@@GLIBC_2.2.5>:
feb00: mov $0x63,%eax
feb05: syscall
feb07: cmp $0xfffffffffffff001,%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 $0xffffffffffffffff,%rax
feb20: retq 但是它没有vDSO加速,所以它将比clock_gettime慢得多,无论是CLOCK_REALTIME还是CLOCK_MONOTONIC,在当前的系统中都是如此。
https://stackoverflow.com/questions/71145912
复制相似问题