プロセスが実行されているかどうかに基づいてログ ファイルをアーカイブするシェル スクリプトがあります。ログ ファイルがプロセスで使用されていない場合は、アーカイブします。これまで、使用中のログ ファイルを取得するために lsof を使用していましたが、今後は perl を使用してこの機能を実行することにしました。
Linux の lsof が実行できるものに似た perl モジュールはありますか?
lsof をラップする perl モジュールがあります。Unix::Lsofを参照してください。
私が見ているように、使用しないことの大きな問題lsof
は、オペレーティング システムから独立した方法で作業する必要があることです。を使用lsof
すると、perl プログラマーはオペレーティング システムに依存しない一貫したアプリケーションで作業できます。
Perl モジュールの開発者に lsof を書かせることは、事実上、lsof をライブラリとして記述し、それを perl にリンクすることになります。これは、既存のバイナリを使用するよりもはるかに多くの作業です。
fuser
コマンドを使用することもできます。このコマンドは、プロセス ID とファイル ハンドルを表示します。同じ機能を実装しようとするモジュールもあります。perldoc からのメモ:
これが機能する方法が Linux 以外の OS で機能する可能性は非常に低く、その場合でも 2.2.* カーネル以外では機能しない可能性があります。
/proc/*/fd を歩いて、そこにあるファイル記述子を調べて、問題のファイルを指しているものがあるかどうかを確認してみてください。ログ ファイルを開く実行中のプロセスのプロセス ID がわかっている場合は、そのプロセスを簡単に調べることができます。これがフューザーモジュールの仕組みです。
とはいえ、「なぜ lsof から離れたいのですか」と尋ねるべきです。