小编olo*_*olo的帖子

Perl:通过open()创建僵尸而不关闭()

问题出在这里:我有一个守护进程,它从客户端获取请求,由于请求而执行一个函数(来自某个模块),并向客户端返回一个答案.在fork()之后我关闭了STDIN,STDOUT和STDERR.一个功能是检查dmesg.为此,我通过open(DMESG,"/ bin/dmesg |")获得dmesg输出.读完之后我没有关闭这个fh,因为我认为它会在函数完成后自动关闭.但这不会发生,每次调用dmesg我都会得到一个僵尸.

关于如何重新初始化Perl的STDIN/STDOUT/STDERR?我发现"关闭STDOUT而不是重新打开的问题是,如果你打开其他文件,它们可能会得到fd 0,1或2 - 阻止你将来重新打开STDOUT." 作者:jmanning2k我认为它与它有关但我并没有真正得到它.我希望有人可以向我解释.

我知道我可以避免这个问题,例如通过qx()调用dmesg; 或者只是关闭fh,但我想了解僵尸的来源.

perl file-io filehandle zombie-process

3
推荐指数
2
解决办法
543
查看次数

标签 统计

file-io ×1

filehandle ×1

perl ×1

zombie-process ×1