lsof并不是监控/dev/random的最佳工具,因为进程读取的时间非常短暂。我不知道有什么好方法可以获取正在进行读取操作的进程,但使用inotify可以监控是否有读取操作。

这里基本上有两种方法:

在N秒后以以下命令获取总结:

inotifywatch -v -t 60 /dev/random

查看实时访问事件:

inotifywait -m --timefmt '%H:%M:%S' --format '%T: %e' /dev/random

既不会给你过程,后者也不会给你读取的大小。第一个会给你一个摘要,如下所示:

total access close_nowrite open filename

18 16 1 1 /dev/random

如果你运行这个命令并执行 dd if=/dev/random of=/tmp/foo bs=1 count=3,你就可以明白这个方法的意思了。

总之,这种方法不会在内核从池中消耗时给你提供滴答声。

当涉及到使用熵检查状态时

watch cat /proc/sys/kernel/random/entropy_avail

这不是一个好主意,因为每只猫都会消耗熵。(我现在看到另一个回答也提到了这一点。)我还有一些关于这个的C代码,昨天试着找了一下。我会看看能否找到它并稍后更新答案。