linux查询jiffies命令,关于linux:将jiffies转换为秒

我有一段用户空间代码,该代码正在解析/ proc / PID / task / TID / stat以获取cpu的使用情况。 我可以使用HZ来获取每秒的跳动,但是此代码可以移动到另一台具有不同配置值的机器上。 有什么方法可以在运行时从用户空间获取HZ的值吗?

重复:stackoverflow.com/questions/2731463/

这不是重复项,因为我不能使用HZ定义。

您将其除以从sysconf(_SC_CLK_TCK)获得的数字。

但是,我认为在Linux下,无论实际的时钟滴答数如何,该值始终为100,在用户空间中始终以100表示??。

参见man proc(5)。

我确实读过总是向用户空间显示100 ...但是不确定/ proc是否算作用户空间:)

我不确定我是否理解:这是否意味着HZ实际上不是发问者想要的号码?

HZ是我想要的数字...但是它是一个常量编译的。 只要我在我编译过的同一台计算机上运行,一切都很好。 但是,如果我在不重新编译的情况下移至另一台计算机,则它可能具有错误的值。

为了阐明MarkR答案背后的数学原理:

sysconf(_SC_CLK_TCK)将使您成为jiffies per second。将jiffies除以您从sysconf(_SC_CLK_TCK)获得的数字即可得到总秒数。

jiffies                      jiffies              seconds

--------------------    =     -----------------    =    -------    =    seconds

sysconf(_SC_CLK_TCK)          (jiffies/second)             1

对于shell脚本等,请从命令行使用getconf CLK_TCK。 Use可以使用它作为环境变量或在命令行中传递该参数。

main(int argc, char **argv) {

unsigned long clk_tck = atol(

getenv("CLK_TCK") ||"0"

) || sysconf(_SC_CLK_TCK) ;

... /* your code */

这使用上面的sysconf,但是允许您使用环境变量覆盖它,可以使用上面的命令来设置。

" ps"命令的源包含文件,以获取HZ的值。

他们还寻找编号为17的" ELF注释"以查找HZ的值(sysinfo.c):

//extern char** environ;

/* for ELF executables, notes are pushed before environment and args */

static unsigned long find_elf_note(unsigned long findme){

unsigned long *ep = (unsigned long *)environ;

while(*ep++);

while(*ep){

if(ep[0]==findme) return ep[1];

ep+=2;

}

return NOTE_NOT_FOUND;

}

[...]

hz = find_elf_note(17);

我必须承认它对我来说很奇怪,因为ELF注释是编译期间定义的部分。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值