0

でループを実行して、開いているすべてのファイルハンドルを閉じようとする python popen2 にパッチを適用したいと考えています[3, SC_OPEN_MAX]

これは、誰かが 1,000,000 のような巨大な値を使用して上限を増やすと、ulimitpopen を使用するすべての Python アプリケーションが効果的にブロックされることを意味します。

質問のポイントは、プロセスの開いているファイルハンドラーのリストを取得するにはどうすればよいかということです。このソリューションは、少なくとも Linux と Windows で動作するはずです。

注:これはhttp://bugs.python.org/issue1663329を再修正するためのものです

4

1 に答える 1

1

あなたのアプローチはWindowsでは機能しません。実際、Windows には列挙可能なファイル ハンドルさえありません。あなたの for ループ アプローチは、Unix の select-poll ループでよく使用されていましたが、ソケット ハンドルが 0x80000000 を超えることが多かったため、Windows では惨めに失敗しました。

しかし、私の記憶が正しければ、ファイルハンドルはデフォルトで Linux の exec 呼び出しによって閉じられ、Windows でも同様のことが起こると思います。exec を介して開いたままのハンドルを取得するには、明示的に要求する必要があります。

アップデート:

これは興味深いかもしれませんhttp://bugs.python.org/issue1663329

また、あなたが popen2 について話していることに気付いたのは今だけです。Python が十分に新しい場合は、subprocess代わりに実際に使用する必要があります。

于 2012-05-17T09:40:28.327 に答える