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代码,昨天试着找了一下。我会看看能否找到它并稍后更新答案。