私は完全な NodeJS 初心者です。
そうは言っても、NodeJS の Cluster API とprocess.exit. また、これらの疑問のすべてが Unix 自体の動作に関係していることも認識しています。
process.exit()これにより、現在のプロセスが「成功」コードで終了することがわかっています0.
私のテストでは、2 つのファイルがあります:index.jsとindexWorker.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また、ps、ps -axはps -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コミュニティに感謝します!
乾杯!