1

私は完全な NodeJS 初心者です。

そうは言っても、NodeJS の Cluster API とprocess.exit. また、これらの疑問のすべてが Unix 自体の動作に関係していることも認識しています。

process.exit()これにより、現在のプロセスが「成功」コードで終了することがわかっています0.

私のテストでは、2 つのファイルがあります:index.jsindexWorker.js.

index.js外観は次のとおりです。

var cluster = require('cluster');

if (cluster.isMaster) {

    // Setup the required fork behavior.
    cluster.setupMaster({
            exec: 'indexWorker.js'
    });

    var cpuCount = require('os').cpus().length;

    // Create a worker for each logical core.
    for (var i = 0; i < cpuCount; ++i) {
        cluster.fork({'NODE_ENV': 'development'});
    }

    console.log('Calling process.exit on parent.');
    process.exit();

}

そして、これが次のindexWorker.jsようになります。

var cluster = require('cluster');

console.log("Started worker having ID: " + cluster.worker.id);

ここに私の質問/疑問があります:

疑い 1

今、私process.exitは親で使用しているので、すべてのワーカー プロセスは孤立したプロセスになるべきだと理解しています。ただし、まず、親 ( ) がすぐに終了^Cしているにもかかわらず、を実行するまでコントロールが端末ウィンドウに戻りません。index.jsまた、psps -axps -elf | grep <pattern>ノードプログラムが実行されているとは考えていないようです。だから私の疑問は、なぜコントロールが端末に戻らないのか、なぜps何も表示されないのかということです。

疑い 2

process.exitから削除するindex.jsと、親がタスクを終了したにもかかわらず、子プロセスが実行されているため、親が終了していないため、コントロールが端末に戻らないことがわかります。それは正しい理解ですか、それとも何か不足していますか?

疑い 3

呼び出しとからのcluster.fork呼び出しを削除すると、スクリプトが完了し、制御がすぐにターミナル ウィンドウに返されます。process.exit()index.jsindex.js

ただし、ご覧のindexWorker.jsとおり、長い操作も行っていません。コンソールメッセージを出力するだけです。その場合、プロセスがまだ実行されているのはなぜですか? 動作は親の動作と同じであるべきではありませんか?つまり、スクリプトの完了時に終了し、最終的に制御を端末ウィンドウに戻しますか?

私はnode index.jsこれらすべてのテストを実行しているだけです。プロセスをバックグラウンドに置くことはありません。私のテストは Mac で実行されています。

今のところ、私が持っている疑問はそれだけです。:)

私は基本的にprocess.exit、さまざまな場所に置いて実行することで実験してきたpsため、これらの点について疑問があります。私の疑問でカバーされていない親/子プロセスの動作に関して指摘したいことが他にあれば、私は大いに感謝します! それは間違いなく私とコミュニティに何らかの形で役立ちます.

SOコミュニティに感謝します!

乾杯!

4

0 に答える 0