問題は次のとおりです。クライアントから要求を取得し、要求に応じて(一部のモジュールから)関数を実行し、クライアントに応答を返すデーモンがあります。fork()の後、STDIN、STDOUT、およびSTDERRを閉じます。1つの機能はdmesgをチェックすることです。このために、open(DMESG、 "/ bin / dmesg |")を介してdmesg出力を取得します。関数が終了すると自動的に閉じると思ったので、読んだ後は閉じません。しかし、これは発生せず、dmesgを呼び出すたびにゾンビが発生します。
PerlのSTDIN /STDOUT / STDERRを再初期化するにはどうすればよいですか?「再度開く代わりにSTDOUTを閉じる場合の問題は、他のファイルを開くと、fd 0、1、または2になる可能性があるため、将来STDOUTを再度開くことができないことです。」by jmanning2kそして、それはそれと関係があると思いますが、私は実際にはそれを理解していません。誰かが私にそれを説明してくれることを願っています。
たとえば、qx()を介してdmesgを呼び出すことで、問題を回避できることを知っています。または単にfhを閉じますが、ゾンビがどこから来ているのかを理解したいと思います。