tail -f、ポーリングを使用しない

tail -f、ポーリングを使用しない

私はNode.jsを使ってファイルを追跡する最も効率的な方法を探しています。

これを行うライブラリがいくつかありますが、ファイルの変更を確認するには時間間隔が必要なため、ポーリングを使用しているようです。

tail -fを実行してそのプロセスの標準出力を読み取るプロセスを作成できるかどうか疑問に思います。 Linuxシステムのtail -fコマンドがポーリングを使用しているのか、それとも低レベルの観察可能な項目に接続するのかを知っていますか? tail -fはどのように機能しますか?

Node.jsでは、次のことができます。

const cp = require('child_process');

module.exports = function(file){

    const n = cp.spawn('tail',['-f',file]);

    n.on('error', function(err){
        console.error(err.stack || err);
    });

    return n.stdout;


};

しかし、これを行うより効率的な方法があるかどうかを知りたいです。

答え1

Linuxでは、GNU coreutilsのバージョンは次のものをtail使用します。inotifyファイルの変更を待つのをブロックします。 FreeBSDの場合は、tail以下を使用してください。クウェント同じことをしてください。変化を繰り返し確認し、寝るよりもこれが良いです。これを行う必要がある頻度と状況が変わる頻度によっては、node.jsからを呼び出すために外部プロセスを作成することが価値があるかもしれませんtail

LinuxやFreeBSD(またはMacOS?)を使用していない場合、このtailユーティリティはJavaScriptで反復チェックとスリープモードで直接実行できるよりも優れていません。

あるいは、LinuxまたはFreeBSDを使用している場合は、プロセスを作成せずに一部の拡張/プラグイン/モジュールを使用してNode.jsで直接inotify使用できます。keventこれが存在するかどうかわかりません。

関連情報