私は完全な 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.js
index.js
ただし、ご覧のindexWorker.js
とおり、長い操作も行っていません。コンソールメッセージを出力するだけです。その場合、プロセスがまだ実行されているのはなぜですか? 動作は親の動作と同じであるべきではありませんか?つまり、スクリプトの完了時に終了し、最終的に制御を端末ウィンドウに戻しますか?
私はnode index.js
これらすべてのテストを実行しているだけです。プロセスをバックグラウンドに置くことはありません。私のテストは Mac で実行されています。
今のところ、私が持っている疑問はそれだけです。:)
私は基本的にprocess.exit
、さまざまな場所に置いて実行することで実験してきたps
ため、これらの点について疑問があります。私の疑問でカバーされていない親/子プロセスの動作に関して指摘したいことが他にあれば、私は大いに感謝します! それは間違いなく私とコミュニティに何らかの形で役立ちます.
SOコミュニティに感謝します!
乾杯!