背景信息:我想在一台Red Hat服务器上运行一个脚本,从/dev/random读取一些数据,并使用Perl的unpack()命令将其转换为十六进制字符串以备后用(评估数据库操作性能)。我对/dev/random运行了几个“head -1”,似乎一切正常,但是在多次调用之后,它会卡住。几分钟后,它最终输出一小块文本,然后完成。
我切换到了/dev/urandom(我真的不想这样做,因为它更慢,而我也不需要那么高质量的随机数),前两三次调用它都正常,然后它也开始挂起。我想知道是否是“head”命令导致了这个问题,所以我尝试使用Perl进行一些简单的I/O操作,但它也挂起了。最后我使用了“dd”命令将一些信息直接转储到文件中,而不是输出到终端。我要求它提供1MB的数据,但在我杀掉它之前,它花了3分钟才获取了约400字节。
我检查了进程列表,CPU和内存基本没有被使用。究竟是什么原因导致/dev/random出现了这种情况?我该如何避免/修复它在未来再次出现?
编辑:谢谢大家的帮助!看来我把random和urandom搞混了。现在我已经让脚本正常运行了。今天好像学到了新东西 :)
/dev/random
,请参考维基百科:"当熵池为空时,从/dev/random读取将会阻塞,直到收集到更多的环境噪声。"/dev/urandom
应该是非阻塞的,你确定使用了它吗? - user395760head -1
命令,这将读取一行数据,即读到遇到换行符为止。如果你想读取少量数据,最好使用dd
命令。 - Hasturkun/dev/urandom
也不太适合生成大量的随机数据。虽然在这种情况下你似乎并不太担心安全性,但也许你可以从/dev/urandom
中获取几个字节,并用它来种子化Python(C,或其他)PRNG? - eaj