1

サブプロセスの開いているファイルを取得するにはどうすればよいですか?

ファイルを生成するサブプロセスを開きました。これらのファイルのファイル記述子にfsyncを実行させたいです。

だから私がこのようなコードを持っているなら:

p = subprocess.Popen([
            'some_program'
])

プロセスpは、以下を使用してサブプロセスのプロセスIDを取得できるいくつかのファイルを生成します。

p.pid

しかし、どうすればこれらのファイルのfdを取得してflushとfsync()を呼び出すことができますか?

実際、「lsof」(開いているファイルの一覧表示)というユーティリティを見つけましたが、システムにインストールまたはサポートされていないため、標準的な方法が本当に必要なため、これ以上の調査は行いませんでした。

ありがとう

4

3 に答える 3

2

各プロセスには、ファイル記述子の独自のテーブルがあります。子プロセスがFD8で開いている特定のファイルを持っていることがわかっている場合(これは簡単です。リストを取得するだけです/proc/<pid>/fd)、子プロセスのファイルではなくプロセスのファイルを同期しています。fsync(8)

同じことがファイル記述子を使用するすべての関数に適用されます:、、、、fread.. ..fwritedupclose

の効果を得るにはfsync、代わりに呼び出すことができますsync

代わりにできることは、ある種のRPCメカニズムを実装することです。たとえば、fsyncSIGUSR1を受信したときに、開いているすべてのFDで子を実行するシグナルハンドラーを追加できます。

于 2012-10-17T22:03:30.040 に答える
1

/ proc / pid / fdに移動する代わりに、パックされたソリューションを使用する場合は、psutilsのlsofを使用するオプションがあります。

于 2012-10-17T19:04:45.510 に答える
1

別のプロセスに代わってfsyncすることはできません。また、おそらくfsyncではなくフラッシュが必要です。別のプロセスに代わってフラッシュすることもできません。要件を再考してください。

于 2012-10-17T22:29:04.157 に答える